今天终于将某个ZF项目的任务清完了,然后继续搞我的图片重命名加水印导出功能。简单点就是图片名字重命名然后上面加上水印嘛,可以自定义颜色啊,透明度啊,字体啊,水印位置啥的。这是我做的第三个比较多东西的功能吧。第一个是公告消息(包括消息推送和文件上传后预览功能),第二个是做的定位控件(PC端加手机端),第三个就是这玩意了。其实网上已经有很多图片加水印的例子了。我这里就不弄出来了。
但是,由于我前端的颜色选择器用的是jQuery-Color-Picker,所以保存到数据库的颜色都是十六进制的,例如:#ff0。而图片添加水印的颜色是用到Color类的,所以我们需要将它转换一下。
正常来说十六进制的颜色应该是#然后后面加上6个东西(数字或者字母),为什么我上面的是#加上三个呢,所以这里需要注意一下了,这是缩写,原本的是#ffff00的,所以可以进行缩写。我之所以讲到这个,因为我们RGB和十六进制转换的时候,十六进制不能缩写。
下面直接上工具类的代码:
/**
* 颜色转换工具类(RGB<->十六进制)
* @author Howinfun
*
*/
public class ColorUtil {
/**
* Color对象转换成十六进制字符串
* @param color Color对象
* @return 16进制颜色字符串
* */
private static String toHexFromColor(Color color){
String r,g,b;
StringBuilder su = new StringBuilder();
r = Integer.toHexString(color.getRed());
g = Integer.toHexString(color.getGreen());
b = Integer.toHexString(color.getBlue());
r = r.length() == 1 ? "0" + r : r;
g = g.length() ==1 ? "0" +g : g;
b = b.length() == 1 ? "0" + b : b;
r = r.toUpperCase();
g = g.toUpperCase();
b = b.toUpperCase();
//su.append("0xFF");
su.append("#");
su.append(r);
su.append(g);
su.append(b);
//#0000FF
return su.toString();
}
/**
* 十六进制字符串转换成Color对象
* @param colorStr 16进制颜色字符串
* @return Color对象
* */
public static Color toColorFromString(String colorStr){
int length = colorStr.length();
//需要处理一下那些缩写的,例如#ff0,我们要将他转为#ffff00
if(length <= 4){
char c1 = colorStr.charAt(1);
char c2 = colorStr.charAt(2);
char c3 = colorStr.charAt(3);
colorStr = "#"+c1+c1+c2+c2+c3+c3;
}
String str1 = colorStr.substring(1, 3);
String str2 = colorStr.substring(3, 5);
String str3 = colorStr.substring(5, 7);
int red = Integer.parseInt(str1, 16);
int green = Integer.parseInt(str2, 16);
int blue = Integer.parseInt(str3, 16);
Color color = new Color(red,green,blue) ;
//java.awt.Color[r=0,g=0,b=255]
return color;
}
public static void main(String[] args) {
String colorStr = "#ff0";
Color color = toColorFromString(colorStr) ;
System.out.println(color);
}
}