Skip to content

Instantly share code, notes, and snippets.

@yelcat
Created September 27, 2012 02:34
Show Gist options
  • Save yelcat/3791853 to your computer and use it in GitHub Desktop.
Save yelcat/3791853 to your computer and use it in GitHub Desktop.
图片中心链接转换代码样例
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import static com.google.common.base.Preconditions.checkState;
/**
* 用于图片管理的 DTO拼装
*/
public class PictureDTOAssembler {
private final String urlPrefix;
private final String waterPicUrl;
private static final String IMGEXTRA_STRING = "/imgextra/";
private static final String DEFAULT_LOGO_SRC = "http://img04.taobaocdn.com/tps/i4/T10FW9Xg8hXXXXXXXX-72-72.jpg";
public static final String DEFAULT_LOGO = "DEFAULT_LOGO";
private final String DEFAULT_REGEX = "(i[1-8]/\\d{8}/\\p{ASCII}*.(jpg|gif|png|jpeg))|(i[1-8]/\\p{ASCII}*.(jpg|gif|png|jpeg))";
@Autowired
public PictureDTOAssembler(final String urlPrefix,
final String waterPicUrl) {
this.urlPrefix = urlPrefix;
this.waterPicUrl = waterPicUrl;
}
/**
* 从短url转化等长url
* @param internalUrl i1/1011104097503/T1pHpcXglJXXXXXXXX_!!111-0-software.jpg
* @return externalUrl
*/
public String getExternalUrl(String internalUrl) {
Validate.notEmpty(internalUrl);
if(internalUrl.equals(DEFAULT_LOGO)){
return DEFAULT_LOGO_SRC;
}
Validate.isTrue(internalUrl.matches(DEFAULT_REGEX));
String externalUrl = replaceUrlBrokerImgId(urlPrefix, internalUrl) + IMGEXTRA_STRING + internalUrl;
return externalUrl;
}
/**
* 从长url转化得到短url
* @param externalUrl http://img01.config-vip.taobaocdn.net/imgextra/i1/1011104097503/T1pHpcXglJXXXXXXXX_!!111-0-software.jpg
* @return InternalUrl
*/
public String getInternalUrl(String externalUrl) {
Validate.notEmpty(externalUrl);
if(externalUrl.equals(DEFAULT_LOGO_SRC)){
return DEFAULT_LOGO;
}
String[] strList = externalUrl.split(IMGEXTRA_STRING);
checkState(strList != null && strList.length == 2);
checkState(strList[1].matches(DEFAULT_REGEX));
return strList[1];
}
/**
* 将AppPicSrc对象由长url转化为短url
* @param picSrc
* @return
*/
public AppPicSrc getAppPicSrcInternalUrl(AppPicSrc picSrc){
String newSrcString = "";
if(picSrc == null || StringUtil.isBlank(picSrc.appPicSrcString())){
return picSrc;
}
for (String src : picSrc.appPicSrcString().split(AppPicSrc.VALUE_SEPARATOR)){
String[] ss = src.split(AppPicSrc.Attribute_SEPARATOR);
String isMain = ss.length>1?ss[1]:"0";
newSrcString += getInternalUrl(ss[0])+AppPicSrc.Attribute_SEPARATOR+isMain+ AppPicSrc.VALUE_SEPARATOR;
}
if (newSrcString.length() > 0){
newSrcString = newSrcString.substring(0,newSrcString.length() - 1);
}
return new AppPicSrc(newSrcString);
}
/**
* 将AppPicSrc对象由短url转化为长url
* @param mutipleExternalUrl
* @return
*/
public AppPicSrc getAppPicSrcExternalUrl(AppPicSrc picSrc){
String newSrcString = "";
if(picSrc == null || StringUtil.isBlank(picSrc.appPicSrcString())){
return picSrc;
}
for (String src : picSrc.appPicSrcString().split(AppPicSrc.VALUE_SEPARATOR)){
String[] ss = src.split(AppPicSrc.Attribute_SEPARATOR);
String isMain = ss.length>1?ss[1]:"0";
newSrcString += getExternalUrl(ss[0])+AppPicSrc.Attribute_SEPARATOR+isMain+ AppPicSrc.VALUE_SEPARATOR;
}
if (newSrcString.length() > 0){
newSrcString = newSrcString.substring(0,newSrcString.length() - 1);
}
return new AppPicSrc(newSrcString);
}
/**
* 拼装 请求图片多媒体平台的 入参参数
* @param pictureInputDTO
* @return fileAddTO
* @throws IOException
*/
public FileAddTO fromDTO(PictureInputDTO pictureInputDTO){
FileAddTO fileAddTO = new FileAddTO();
//fileAddTO.setInputStream(pictureInputDTO.getInputStream());
fileAddTO.setFileData(pictureInputDTO.getFileData());
fileAddTO.setUserId(pictureInputDTO.getUserId());
fileAddTO.setDirId(0L);
if(pictureInputDTO.isWaterString()){
//打水印
ImageFilter filter = ImageFilter.getInstance(pictureInputDTO.getFileData());
if (filter != null){
ImageResult ir = filter.process(pictureInputDTO.getFileData(),ImageFilter.MODE_ALL_DATA);
int width = ir.getWidth();
int height = ir.getHeight();
if(width<=1000 && height<=1500){
//目前1000*1500分辨率的应用才能打水印
WaterMarkDO waterMarkDO = new WaterMarkDO();
waterMarkDO.setImgUrl(waterPicUrl);
fileAddTO.setWaterMark(waterMarkDO);
fileAddTO.setWaterMarkOn(FileConsts.WATER_MARK_IMG);
}
}
}
if(pictureInputDTO.isCheck()){
//图片压缩
fileAddTO.setCompressRate(0.9);
fileAddTO.setCompressType(FileConsts.COMPRESS_BY_SCALE);
}
fileAddTO.setName("name");
return fileAddTO;
}
/**
* 替换域名中的 数字
* @param prefix
* @param simplePicUrl
* @return
*/
private static String replaceUrlBrokerImgId(String prefix, String simplePicUrl){
Integer imgID = NumberUtils.toInt(StringUtils.substring(simplePicUrl,1,2),0);
String idString = "0" +imgID.toString();
return prefix.replaceFirst("0x", idString);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment