ImageMagick利用蒙版合成图片

先看合成后的效果图。

需要的图片素材:

1.一张图片(335x600)

2.一张蒙版图片(335x600)

3.一张相框图片(335x600)


第一步,根据蒙板和图片,截取图片。而且所截取的图片之外的地方需要透明。

我提供的蒙版黑色区域外是透明的,那么需要蒙版黑色区域外显示透明色,黑色区域内显示照片就行了。


ImageMagick中合成图片有几种方式,其中convert命令下加上-composite参数可以合成图片。

以下摘自:www.189works.com/topic/a/tupianzhuanti/ImageMagick/chuji/2012/0229/34.html#fill

-composite
执行两张图像阿尔法通道的合并,还包括一个可选的蒙版。
根据当前的-compose设置,将第一张destination图像重叠至第二张source图像上。其中source图像的位置通过-geometry选项来设置。
如果存在第三张图像,它将被视为与destination图像相关的一个灰度蒙版。这个蒙版可以在destination图像中设置允许进行修改的区域。不过,对于displace合并方式,蒙版将用来提供一个单独的Y位移图像。
如果-compose选项需要更多的数字参数或标志,那么可以通过使用“-set 'option:compose:args'”来进行设置。
还有一些合并方式可以修改覆盖区域外的destination图像。你可以通过设置“-set 'option:compose:outside-overlay'”为false来禁止这种行为。


这里提到-compose。


-compose operator
设置图像合并类型。
可以参考阿尔法通道合并的讲解获得更详细的信息。
此设置会影响合并两个(或更多)图像操作命令对图像的处理方式。这些命令包括:-composite, -layers composite, -flatten, -mosaic, -layers merge, -border, -frame, -extent。
它也是composite命令的主要选项之一。

另外这里有一篇写的很好的博文,详细介绍了-compse的基本用法。

http://www.cnblogs.com/mfryf/archive/2012/02/12/2347975.html


如果以上都看完了,那么合成需要的图片基本没什么问题了。

第一步裁剪图片。

直接上命令:

convert mask-1.png -compose atop mask-0.png -geometry 355x600+0+0 -composite new.png

说明:

mask-1.png:蒙版图片。

mask-0.png:要合成的原始图片。

-geometry 355x600+0+0:这个参数指的是上层图片的大小和位置,355x600是图片的宽高,+0+0表示坐标(0,0)。

裁剪后的效果如下:

第二步,将生成的这张图与准备好的相框合成。

convert new.png -compose over 775_m.png -geometry 355x600+0+0 -composite new.png

说明:

775_m.png:相框图片。

运行完以后就出现上面的成品效果图了。


下面使用java来生成这种效果。

下载好im4java的jar包。

http://sourceforge.net/projects/im4java/files/im4java-1.4.0/

	/**
	 * 生成蒙板和图片的合成图
	 * 合成图的大小以蒙版大小为标准,且原图必须要与蒙版大小一致
	 * 合成该图片的命令:
	 * convert 蒙板图 -compose atop 原图 -geometry 大小和坐标 -composite 生成图片
	 * @param desPath 生成的合成图的保存路径
	 * @param srcPath 合成图
	 * @throws IOException
	 * @throws InterruptedException
	 * @throws IM4JavaException
	 */
	public static void maskCompositePic(String desPath, String originalPic, String maskPic) throws IOException, InterruptedException, IM4JavaException {
		// 获取图片的宽高
		BufferedImage bi = ImageIO.read(new File(maskPic));
		int width = bi.getWidth();
		int height = bi.getHeight();
		IMOperation op = new IMOperation();
		op.addImage(originalPic);
		op.compose("atop");
		op.addImage(maskPic);
		op.geometry(width, height, 0, 0);
		op.composite();
		op.addImage(desPath);
		ConvertCmd cmd = new ConvertCmd();
		cmd.setSearchPath(imageMagickPath);
		cmd.run(op);
	}




结束语:

ImageMagick开源项目是一套功能强大、稳定、免费和开源的图形图像处理工具集和开发包。最重要的是它曝露出来的接口可供多种开发语言调用。这一点就让人爽歪歪了。

最近在使用java语言处理一下图像,自己在网上搜罗了一些比较有价值的资料,整理一下。

●网络进行时的博客,对我帮助很大。很感激和佩服这位博主。

http://www.netingcn.com/category/imagemagick

●提供了ImageMagick的API的中文翻译,在不断更新。还有ImageMagick的论坛。

http://www.189works.com/topic/a/tupianzhuanti/ImageMagick/


http://www.ibm.com/developerworks/cn/opensource/os-imagemagick/#distributing

最重要的是ImageMagick的官方网站,这个不说网上搜一下就能搜到。

http://www.imagemagick.org/script/index.php


阅读更多
个人分类: 其他
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭