记住一个中心思想,整个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 ListstringList = 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秒左右。好气哟。