Imagemagick Im4java 合成图片

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

转载于:https://my.oschina.net/shitouscalpel/blog/1610874

你可能感兴趣的:(java)