Created
September 27, 2012 02:34
-
-
Save yelcat/3791853 to your computer and use it in GitHub Desktop.
图片中心链接转换代码样例
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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