package com;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.imageio.ImageIO;import org.json.JSONArray;import org.json.JSONObject;import com.UpYun.FolderItem;import com.UpYun.PARAMS;import com.upyun.FormUploader;import com.upyun.Params;import com.upyun.Result;/** * 又拍云文件处理 ** date: 2016年9月28日 上午9:48:49 ** @ClassName: FileUtils * @author deyi * @version V1.0 */public class UpYunFileUtils { /**服务名称*/ private static String BUCKET_NAME; /**操作员*/ private static String OPERATOR_NAME; /**操作员密码*/ private static String OPERATOR_PWD; /**API key*/ private static String APIKEY; /**大水印url*/ private static final String WATERMARK_LARGE="/watermark/large.png"; /**正常水印url*/ private static final String WATERMARK="/watermark/watermark.png"; /**小水印url*/ private static final String WATERMARK_SMALL="/watermark/small.png"; /**默认水印透明度*/ private static final int DEFAULT_OPACITY = 80; private static UpYun upyun; private static FormUploader uploader; private final static String SMALL="_small";; public static void init(String bucketName,String operatorName,String operatorPwd,String apikey){ BUCKET_NAME = bucketName; OPERATOR_NAME = operatorName; OPERATOR_PWD = operatorPwd; APIKEY = apikey; upyun = new UpYun(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD); uploader = new FormUploader(BUCKET_NAME, APIKEY, null); } /** * 检查是否已经初始化 * @Title: checkInitialized * @return void * @author deyi * @date 2016年9月29日 上午10:05:23 * @version V1.0 * @throws */ private static void checkInitialized(){ if (upyun == null || uploader == null) { throw new RuntimeException(" Upyun Not Initialized!"); } } /** * 获取图片信息 * @Title: getInfo * @param imgPath * @return Map* @author deyi * @date 2016年9月28日 下午5:20:55 * @version V1.0 * @throws */ public static Map getInfo(String imgPath){ checkInitialized(); return upyun.getFileInfo(imgPath); } /** * 读取文件 * @Title: readFile * @param filePath * @return String * @author deyi * @date 2016年9月28日 下午5:55:09 * @version V1.0 * @throws */ public static String readFile(String filePath){ checkInitialized(); return upyun.readFile(filePath); } /** * 读取文件 * @Title: readFile * @param filePath * @param file * @return boolean * @author deyi * @date 2016年9月28日 下午5:55:26 * @version V1.0 * @throws */ public static boolean readFile(String filePath,File file){ checkInitialized(); return upyun.readFile(filePath, file); } /** * 读取目录 * @Title: readDir * @param filePath * @return List * @author deyi * @date 2016年9月28日 下午5:55:42 * @version V1.0 * @throws */ public static List readDir(String filePath){ checkInitialized(); return upyun.readDir(filePath); } /** * 删除文件 * @Title: deleteFile * @param filePath * @return boolean * @author deyi * @date 2016年9月28日 下午5:55:58 * @version V1.0 * @throws */ public static boolean deleteFile(String filePath){ checkInitialized(); return upyun.deleteFile(filePath); } /** * 判断是否为图片 * @Title: isImage * @param imageFile * @return boolean * @author deyi * @date 2016年9月29日 下午2:05:38 * @version V1.0 * @throws */ public static boolean isImage(File imageFile) { if (!imageFile.exists()) { return false; } BufferedImage img = null; try { img = ImageIO.read(imageFile); if (img == null || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) { return false; } return true; } catch (Exception e) { return false; } finally { img = null; } } /** * 判断是否为图片 * @Title: isImage * @param io * @return boolean * @author deyi * @date 2016年9月30日 上午9:37:01 * @version V1.0 * @throws */ public static boolean isImage(InputStream io) { if (io == null) { return false; } BufferedImage img = null; try { img = ImageIO.read(io); if (img == null || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) { return false; } return true; } catch (Exception e) { return false; } finally { img = null; } } /** * * 上传 (基础) * @Title: upload * @param filePath * @param datas * @param params * @return boolean * @author deyi * @date 2016年9月28日 下午1:53:31 * @version V1.0 * @throws */ public static boolean upload(String filePath,byte[] datas,Map params){ checkInitialized(); return upyun.writeFile(filePath, datas, true, params); } /** * @Title: upload * @param filePath * @param file * @param params * @throws IOException (参数说明) * @return boolean * @author deyi * @date 2016年9月30日 上午9:36:39 * @version V1.0 * @throws */ public static boolean upload(String filePath,File file,Map params) throws IOException{ checkInitialized(); return upyun.writeFile(filePath, file, true, params); } /** * 上传文件 (自动区分普通和非图片,图片可以设置缩略图与水印) * @Title: upload * @param filePath * @param stream * @param makeSmallPath 图片情况下才生效 * @param waterMark 图片情况下才生效 * @throws IOException (参数说明) * @return boolean * @author deyi * @date 2016年9月30日 上午9:54:13 * @version V1.0 * @throws */ public static boolean upload(String filePath,InputStream stream,String makeSmallPath,boolean waterMark) throws IOException{ boolean result = false; BufferedImage image=ImageIO.read(stream); if (image == null || image.getWidth(null) <= 0 || image.getHeight(null) <= 0) { result = upload(filePath, toByteArray(stream), null);//非图片 } else { int width = image.getWidth();//宽 int height = image.getHeight();//高 int min = Math.min(width, height); ImgHandle handle=new ImgHandle(filePath); ImgHandle smallHandle =null; if (waterMark) {//水印 if (min > 1000) { handle.addWatermark(pk(WATERMARK_LARGE)); } else if (min > 500){ handle.addWatermark(pk(WATERMARK)); } else { handle.addWatermark(pk(WATERMARK_SMALL)); } } if (null != makeSmallPath && !"".equals(makeSmallPath)) { //需要缩略图 smallHandle = new ImgHandle(makeSmallPath).sq(120); } ByteArrayOutputStream out = new ByteArrayOutputStream(); String type = filePath.substring(filePath.lastIndexOf(".")+1); ImageIO.write(image,type, out); byte[] b = out.toByteArray(); result = uploadImgBySync(b, handle, smallHandle); } return result; } public static byte[] toByteArray(InputStream input) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); } return output.toByteArray(); } /** * 图片上传 (自动加水印) * @Title: uploadImgAutoWaterMark * @param imgPath * @param stream * @return boolean * @author deyi * @date 2016年9月28日 下午1:52:31 * @throws IOException * @version V1.0 * @throws */ public static boolean uploadImgAutoAddWaterMark(String imgPath,InputStream stream) throws IOException{ BufferedImage image=ImageIO.read(stream); int width = image.getWidth();//宽 int height = image.getHeight();//高 int min = Math.min(width, height); ImgHandle handle = new ImgHandle(); if (min > 1000) { handle.addWatermark(pk(WATERMARK_LARGE)); } else if (min > 500){ handle.addWatermark(pk(WATERMARK)); } else { handle.addWatermark(pk(WATERMARK_SMALL)); } handle.saveAs = imgPath; ByteArrayOutputStream out = new ByteArrayOutputStream(); String type = imgPath.substring(imgPath.lastIndexOf(".")+1); ImageIO.write(image,type, out); byte[] b = out.toByteArray(); return uploadImg(b, handle); } private static Watermark pk(String url) throws IOException{ Map info = getInfo(url); if(info == null || info.size() != 3){ if(info != null){ for(String k:info.keySet()){ System.out.println(k+"="+info.get(k)); } } throw new IOException(url+" 404 Not Found"); } Watermark w=new Watermark(); w.url(url); w.align(ALIGN.SouthEast); w.opacity(DEFAULT_OPACITY).animate(); return w; } /** * 图片上传 并处理 * @Title: uploadImg * @param imgPath * @param imgs * @param handle * @return boolean * @author deyi * @date 2016年9月28日 下午1:53:53 * @throws IOException * @version V1.0 * @throws */ public static boolean uploadImg(byte[] imgs,ImgHandle handle) throws IOException{ Map params =new HashMap (); if(null != handle && !handle.isEmpty()){ params.put(PARAMS.KEY_X_GMKERL_THUMB.getValue(), handle.getParams()); } String imgPath=handle.saveAs; if(null == imgPath || "".equals(imgPath)){ throw new IOException("img save path not Found"); } return upload(imgPath, imgs, params); } /** * 上传图片加水印 * @Title: uploadImgAddWaterMarks * @param imgPath * @param imgs * @param watermarks * @return boolean * @author deyi * @date 2016年9月28日 下午2:09:48 * @throws IOException * @version V1.0 * @throws */ public static boolean uploadImgAddWaterMarks(String imgPath,byte[] imgs,Watermark ... watermarks) throws IOException{ ImgHandle handle = new ImgHandle(); handle.saveAs = imgPath; if(watermarks != null){ for(Watermark w:watermarks){ handle.addWatermark(w); } } return uploadImg(imgs, handle); } /** * 上传图片并生成缩略图 异步(在又拍云服务器上操作,在原图基础上操作缩放) * @Title: uploadImgAndMakeSmallByAsync * @param imgPath * @param imgs * @param width * @param height * @return boolean * @author deyi * @date 2016年9月28日 下午2:54:34 * @throws IOException * @version V1.0 * @throws */ public static boolean uploadImgAndMakeSmallByAsync(byte[] imgs,ImgHandle handle,int width,int height) throws IOException{ String imgPath=handle.saveAs; if(null == imgPath || "".equals(imgPath)){ throw new IOException("img save path not Found"); } Map paramsMap = new HashMap (); paramsMap.put(Params.SAVE_KEY, imgPath); JSONArray jsons=new JSONArray(); JSONObject json=new JSONObject(); String params = new ImgHandle().both(width, height).getParams(); json.put("name", "thumb"); json.put(Params.X_GMKERL_THUMB, params);//缩略图作图 String smallImgPath =smallFilePath(imgPath); json.put("save_as", smallImgPath); jsons.put(json); paramsMap.put(Params.APPS, jsons); if(null != handle && !handle.isEmpty()){ paramsMap.put(Params.X_GMKERL_THUMB, handle.getParams());//原图作图 } checkInitialized(); Result result = uploader.upload(paramsMap, imgs); if(200 == result.getCode()){ //成功 return true; } return false; } public static String smallFilePath(String name){ int lastIndexOf = name.lastIndexOf("."); if (lastIndexOf == -1) { return name+SMALL; } return name.substring(0,lastIndexOf)+SMALL+name.substring(lastIndexOf); } /** * 上传图片异步作图 * @Title: uploadImgByAsync * @param imgPath * @param imgs * @param handle * @param smallHandles * @return boolean * @author deyi * @date 2016年9月28日 下午3:48:45 * @throws IOException * @version V1.0 * @throws */ public static boolean uploadImgByAsync(byte[] imgs,ImgHandle handle,ImgHandle ... smallHandles) throws IOException{ String imgPath=handle.saveAs; if(null == imgPath || "".equals(imgPath)){ throw new IOException("img save path not Found"); } Map paramsMap = new HashMap (); paramsMap.put(Params.SAVE_KEY, imgPath); if (null != smallHandles && smallHandles.length > 0){ //处理异步图片制作 JSONArray jsons=new JSONArray(); for (int i=0;i
ImgHandle.java
package com;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import com.upyun.Base64Coder;/** * 图片处理 ** date: 2016年9月28日 下午12:47:56 ** @ClassName: ImgHandle * @author deyi * @version V1.0 */public class ImgHandle { //图片处理集合 Maphandle=new LinkedHashMap<>(); //水印处理集合 List watermarks=new ArrayList<>(); String saveAs; public ImgHandle(){} public ImgHandle(String saveAs){ this.saveAs=saveAs; } public boolean isEmpty(){ return handle.isEmpty() && watermarks.isEmpty(); } //获取map参数 public String getParams(){ StringBuffer sb=new StringBuffer(); Set set = this.handle.keySet(); for(String k:set){ sb.append('/').append(k).append('/').append(handle.get(k)); } for(Watermark w:watermarks){ sb.append("/watermark").append(w.getParams()); } return sb.toString(); } /** * 限定宽度,高度自适应 * @Title: fw * @param maxWidth * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:38:43 * @version V1.0 * @throws */ public ImgHandle fw(int maxWidth){ this.handle.put("fw", String.valueOf(maxWidth)); return this; } /** * 限定高度,宽度自适应 * @Title: fh * @param maxHeight * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:39:02 * @version V1.0 * @throws */ public ImgHandle fh(int maxHeight){ this.handle.put("fh", String.valueOf(maxHeight)); return this; } /** * 限定最长边,短边自适应 * @Title: max * @param max * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:39:24 * @version V1.0 * @throws */ public ImgHandle max(int max){ this.handle.put("max", String.valueOf(max)); return this; } /** * 限定最短边,长边自适应 * @Title: min * @param min * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:39:42 * @version V1.0 * @throws */ public ImgHandle min(int min){ this.handle.put("min", String.valueOf(min)); return this; } /** * 限定宽度或高度,宽高不足时不缩放 * @Title: fwfh * @param width * @param height * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:39:51 * @version V1.0 * @throws */ public ImgHandle fwfh(int width,int height){ this.handle.put("fwfh", width+"x"+height); return this; } /** * 固定宽度和高度,宽高不足时居中裁剪再缩放 * @Title: both * @param width * @param height * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:40:07 * @version V1.0 * @throws */ public ImgHandle both(int width,int height){ this.handle.put("both", width+"x"+height); return this; } /** * 图片缩放成正方形,宽高相等 * @Title: sq * @param width * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:40:25 * @version V1.0 * @throws */ public ImgHandle sq(int width){ this.handle.put("sq", String.valueOf(width)); return this; } /** * 缩放比例,如 50 宽高等比例缩放,取值范围 [1-1000] * @Title: scale * @param size * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:40:38 * @version V1.0 * @throws */ public ImgHandle scale(int size){ this.handle.put("scale", String.valueOf(size)); return this; } /** * 宽度按比例缩放,高度不变,取值范围 [1-1000] * @Title: wscale * @param size * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:41:00 * @version V1.0 * @throws */ public ImgHandle wscale(int size){ this.handle.put("wscale", String.valueOf(size)); return this; } /** * 高度按比例缩放,宽度不变,取值范围 [1-1000] * @Title: hscale * @param size * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:41:19 * @version V1.0 * @throws */ public ImgHandle hscale(int size){ this.handle.put("hscale", String.valueOf(size)); return this; } /** * 限定长边或短边,进行等比缩放,不裁剪 * @Title: fxfn * @param width * @param height * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:41:36 * @version V1.0 * @throws */ public ImgHandle fxfn(int width,int height){ this.handle.put("fxfn", width+"x"+height); return this; } /** * 限定长边或短边的最小值,进行等比缩放,不裁剪 * @Title: fxfn2 * @param width * @param height * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:41:51 * @version V1.0 * @throws */ public ImgHandle fxfn2(int width,int height){ this.handle.put("fxfn2", width+"x"+height); return this; } /** * 宽高等比例缩放,直到宽高像素积小于但最接近指定值,取值范围 [1-25000000] * @Title: fp * @param px * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:42:03 * @version V1.0 * @throws */ public ImgHandle fp(int px){ this.handle.put("fp", String.valueOf(px)); return this; } /** * 支持放大的参数,可以指定 为 true 进行图片放大 * @Title: force * @param f * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:42:30 * @version V1.0 * @throws */ public ImgHandle force(boolean f){ this.handle.put("force", String.valueOf(f)); return this; } /** * 图片缩放前裁剪 * @Title: crop * @param width * @param height * @param x * @param y * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:44:00 * @version V1.0 * @throws */ public ImgHandle crop(int width,int height,int x,int y){ this.handle.put("crop", width+"x"+height+((x>0)?"a":"s")+x+((y>0)?"a":"s")+y); return this; } /** * 图片缩放后裁剪 * @Title: clip * @param width * @param height * @param x * @param y * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:44:19 * @version V1.0 * @throws */ public ImgHandle clip(int width,int height,int x,int y){ this.handle.put("clip", width+"x"+height+((x>0)?"a":"s")+x+((y>0)?"a":"s")+y); return this; } /** * 位置,如 north 裁剪开始的方位,默认是 northwest * @Title: gravity * @param align * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:44:32 * @version V1.0 * @throws */ public ImgHandle gravity(ALIGN align){ this.handle.put("gravity",align.getValue()); return this; } /** * 水印处理 * @Title: addWatermark * @param watermark * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:44:55 * @version V1.0 * @throws */ public ImgHandle addWatermark(Watermark watermark){ this.watermarks.add(watermark); return this; } /** * 旋转 自动扶正 * @Title: rotate * @param align * @return ImgHandle * @author deyi * @date 2016年9月28日 上午11:52:41 * @version V1.0 * @throws */ public ImgHandle rotate(){ this.handle.put("rotate","auto"); return this; } /** * 按角度旋转 * @Title: rotate * @param d (0, 360],如 90 度 * @return ImgHandle * @author deyi * @date 2016年9月28日 上午11:54:32 * @version V1.0 * @throws */ public ImgHandle rotate(int d){ this.handle.put("rotate",String.valueOf(d)); return this; } /** * 翻转方向 * @Title: flip * @param flip 如 left,right 翻转方向,可选值:left,right,top,down * @return ImgHandle * @author deyi * @date 2016年9月28日 上午11:59:02 * @version V1.0 * @throws */ public ImgHandle flip(String flip){ this.handle.put("flip",flip); return this; } /** * 锐化 * @Title: unsharp * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:30:33 * @version V1.0 * @throws */ public ImgHandle unsharp(){ this.handle.put("unsharp","true"); return this; } /** * 高斯模糊 * @Title: gaussblur * @param radius 半径; 0 <= radius <= 50 且 radius 是整数;当 radius = 0 时,raduis 根据 sigma 自动计算产生。 * @param sigma 必须为正整数 * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:31:45 * @version V1.0 * @throws */ public ImgHandle gaussblur(int radius,int sigma){ this.handle.put("gaussblur",radius+"x"+sigma); return this; } /** * 边框 大小 * @Title: border * @param width 左右 * @param height 上下 * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:33:49 * @version V1.0 * @throws */ public ImgHandle border(int width,int height){ this.handle.put("border",width+"x"+height); return this; } /** * 边框颜色和透明度 (默认值是 FFFFFF00(白色不透明)) * @Title: brdcolor * @param color rgb * @param p [0-255] * @return ImgHandle * @author deyi * @date 2016年9月28日 下午12:35:30 * @version V1.0 * @throws */ public ImgHandle brdcolor(String color,int p){ if(p>255)p=255; if(p<0)p=0; String hex = Integer.toHexString(p); this.handle.put("brdcolor", (color+(hex.length()>1?hex:"0"+hex)).toUpperCase()); return this; } } /** * 位置 * * date: 2016年9月28日 上午11:07:58 ** @ClassName: GRAVITY * @author deyi * @version V1.0 */ enum ALIGN{ //northwest | north | northeast // | | // | | //--------------+----------------+-------------- // | | //west | center | east // | | //--------------+----------------+-------------- // | | // | | //southwest | south | southeast /** * 西北 */ NorthWest("northwest"), /** * 正北 */ North("north"), /** * 东北 */ NorthEast("northeast"), /** * 正西 */ West("west"), /** * 正中 */ Center("center"), /** * 正东 */ East("east"), /** * 西南 */ SouthWest("southwest"), /** * 正南 */ South("south"), /** * 东南 */ SouthEast("southeast"); private final String value; ALIGN(String value){ this.value=value; } public String getValue() { return value; } } /** * 字体 ** date: 2016年9月28日 上午11:48:06 ** @ClassName: FONT * @author deyi * @version V1.0 */ enum FONT{ //宋体 中文字体 simsun 宋体("simsun"), //黑体 中文字体 simhei 黑体("simhei"), //楷体 中文字体 simkai 楷体("simkai"), //隶书 中文字体 simli 隶书("simli"), //幼圆 中文字体 simyou 幼圆("simyou"), //仿宋 中文字体 simfang 仿宋("simfang"), //简体中文 中文字体 sc 简体中文("sc"), //繁体中文 中文字体 tc 繁体中文("tc"), //Arial 英文字体 arial Arial("arial"), //Georgia 英文字体 georgia Georgia("georgia"), //Helvetica 英文字体 helvetica Helvetica("helvetica"), //Times-New-Roman 英文字体 roman TimesNewRoman("roman"); private final String value; FONT(String value){ this.value=value; } public String getValue() { return value; } } /** * 水印处理 ** date: 2016年9月28日 上午10:54:17 ** @ClassName: Watermark * @author deyi * @version V1.0 */ class Watermark{ Mapparams=new LinkedHashMap<>(); public String getParams(){ StringBuffer sb=new StringBuffer(); for(String k:params.keySet()){ sb.append('/').append(k).append('/').append(params.get(k)); } return sb.toString(); } /** * 图片水印路径 * @Title: url * @param imgpath * @return Watermark * @author deyi * @date 2016年9月28日 上午11:41:21 * @version V1.0 * @throws */ public Watermark url(String imgpath){ String path = Base64Coder.encodeString(imgpath); this.params.put("url",path.replaceAll("/", "|")); return this; } /** * 位置 * @Title: align * @param align * @return Watermark * @author deyi * @date 2016年9月28日 上午11:41:55 * @version V1.0 * @throws */ public Watermark align(ALIGN align){ this.params.put("align",align.getValue()); return this; } /** * 偏移数 * @Title: margin * @param x * @param y * @return Watermark * @author deyi * @date 2016年9月28日 上午11:42:16 * @version V1.0 * @throws */ public Watermark margin(int x,int y){ this.params.put("margin", x+"x"+y); return this; } /** * 透明度 * @Title: opacity * @param opacity 取值范围 [0-100],值越大越不透明,0 完全透明,100 完全不透明 * @return Watermark * @author deyi * @date 2016年9月28日 上午11:42:54 * @version V1.0 * @throws */ public Watermark opacity(int opacity){ this.params.put("opacity", String.valueOf(opacity)); return this; } /** * * 允许对动态图片加水印 默认false * @Title: animate * @return Watermark * @author deyi * @date 2016年9月28日 上午11:43:20 * @version V1.0 * @throws */ public Watermark animate(){ this.params.put("animate", "true"); return this; } /** * 文字内容 * @Title: text * @param text * @return Watermark * @author deyi * @date 2016年9月28日 上午11:46:11 * @version V1.0 * @throws */ public Watermark text(String text){ String base = Base64Coder.encodeString(text); this.params.put("text",base.replaceAll("/", "|")); return this; } /** * 文字大小,单位 px * @Title: size * @param size * @return Watermark * @author deyi * @date 2016年9月28日 上午11:46:36 * @version V1.0 * @throws */ public Watermark size(int size){ this.params.put("size", String.valueOf(size)); return this; } /** * 文字字体 默认宋体 * @Title: font * @param font * @return Watermark * @author deyi * @date 2016年9月28日 上午11:46:58 * @version V1.0 * @throws */ public Watermark font(FONT font){ this.params.put("font", font.getValue()); return this; } /** * 字体颜色 * @Title: color * @param color * @return Watermark * @author deyi * @date 2016年9月28日 上午11:47:18 * @version V1.0 * @throws */ public Watermark color(String color){ this.params.put("color", color.toUpperCase()); return this; } /** * 文字描边 * @Title: border * @param color rgb * @param p 取值 [0-255],值越大越透明,00 表示完全不透明,FF 表示完全透明。 * @return Watermark * @author deyi * @date 2016年9月28日 上午11:30:26 * @version V1.0 * @throws */ public Watermark border(String color,int p){ if(p>255)p=255; if(p<0)p=0; String hex = Integer.toHexString(p); this.params.put("border", (color+(hex.length()>1?hex:"0"+hex)).toUpperCase()); return this; }}