im4java 图片合成_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秒左右。好气哟。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值