记住一个中心思想,整个Im4java 最终还是调用的ImageMagick 的命令,如果有一些特殊的需求的话,请参考命令。
环境是:windows imagemagick 6.9 / java
安装教程之类我就不做了,已经有很多参考的文章了。
1、多个小图片与一张底图合成一张图片
ImageCommand commandComposite = ImageMagickUtils.getImageCommand(ImageMagickUtils.CommandType.convert);
// 增加水印
IMOperation operation = new IMOperation();
// 原图
operation.addImage(destImagePath);
String nmzxPath = prefix + "/yellow_"+sumBallot(curTeam.getBallot(),rivalItem.getBallot())+".png";
// 第一个图片
operation.addImage(nmzxPath);
// 定位
operation.geometry(134, 134, 30, 377);
// 追加命令 -composite
operation.addRawArgs("-composite");
// 这里将多个数字分成单个数字,计算位置,循环加入 例:1234 --- 1、2、3、4
List stringList = this.converIntegerToStringList(rivalItem.getBallot(),false);
Integer count = 0;
for (String item : stringList) {
Integer width = 330 + (stringList.size() * 10);
// 增加水印
String nmzxNubmerPath = prefix + "/red_ballot_" + item + ".png";
// 数字
operation.addImage(nmzxNubmerPath);
operation.geometry(28, 36, width - (25 * count), 426);
// 命令
operation.addRawArgs("-composite");
count++;
}
// 目标图片
operation.addImage(createDirectory(destImagePath));
// Window 指定路径,Linux 不需要哦
commandComposite.setSearchPath(imageMagickPath);
// 一次性合成图片
commandComposite.run(operation);
// 返回成路径
return destImagePath;
2、 中文水印乱码的问题,网上有一些设置encoding的但是效果并不好,我是将windows 上的一些字体安装到了Mac 上。直接Copy 字体安装到Mac 字体册中就可以了。
(1)Linux Mac 直接指定就字体路径就好了
IMOperation op = new IMOperation();
// 字体路径
op.font("/Users/moses_shi/Library/Fonts/SIMHEI.TTF");
// 文字方位-东南
op.gravity("NorthWest");
// 文字编码
op.encoding("UTF-8");
// 文字信息
op.pointsize(24).fill("#FBF6F6").draw("text 255,30 " + "'我是第'");
Integer index = 255 + 24 * 3 + 5;
op.pointsize(38).fill("#FBF6F6").draw("text "+index+",22 " + "'584'");
Integer index2 = index + 20 * 3;
op.pointsize(24).fill("#FBF6F6").draw("text "+index2+",30 " + "'位为上中国际投票的粉丝'");
// 原图
op.addImage(srcImagePath);
// 目标
op.addImage(createDirectory(destImagePath));
ImageCommand cmd = getImageCommand(CommandType.convert);
cmd.run(op);
(2)Windows 同样也是指定路径
IMOperation op = new IMOperation();
String imageMagickPath = "D:\\ImageMagick-6.9.2-Q16";
op.font("C:\\Windows\\Fonts\\simhei.ttf");
// 文字方位-东南
op.gravity("NorthWest");
// 文字编码
op.encoding("UTF-8");
3、关于定位的问题 有篇文章可以参考一下,比较好理解
http://blog.csdn.net/pzw_0612/article/details/52296910
4、Mac 安装和一些命令参考
https://my.oschina.net/u/566591/blog/778851
5、 遗漏一个问题,我最后感觉是服务器磁盘IO 能力比较差劲,我本地合成图片1秒不到,服务器同样的操作居然要3~5秒左右。好气哟。