
正文
图片处理服务 ImageMagick 的安装和使用
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
简介
该文章使用目前官方最新版本7.0.8,这里只记录下Windows系统下的安装。
官方网站:http://www.imagemagick.org/script/index.php。
ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG等格式。利用ImageMagick,可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,既可以通过命令行进行,也可以通过C/C++、Perl、Java、PHP、Python或Ruby编程来完成。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。
ImageMagick的功能通常通过命令行使用,也可以通过编程来使用。编程可以选择通过这些接口调用:G2F (Ada),MagickCore (C),MagickWand (C),ChMagick (Ch),ImageMagickObject (COM+),Magick++ (C++),JMagick (Java),JuliaIO (Julia),L-Magick (Lisp),Lua (LuaJIT),NMagick (Neko/haXe),Magick.NET (.NET),PascalMagick (Pascal),PerlMagick (Perl),MagickWand for PHP (PHP),IMagick (PHP),PythonMagick (Python),magick (R),RMagick (Ruby),or TclMagick (Tcl/TK)。
下载

进入到Download页面,往下翻,找到Windows版本文件的下载页

会看到如下的下载列表(经过整理翻译):

关于下载文件选择:
内存大小是一个重要因素,特别是如果打算处理大型图像。建议至少使用512MB的RAM,但RAM越大越好。ImageMagick不仅在单核计算机上运行良好,也可以在多核系统上自动并行运行,从而大大缩短了运行时间。
Windows版本的ImageMagick是自行安装的。只需单击下面的相应版本,它就会自动启动并向您询问一些安装问题。
文件名称中有Q8的版本是每像素8位分量(例如,8位红色,8位绿色等),而文件名中的Q16是每像素16位分量。Q16版本允许您读取或写入16位图像而不会丢失精度,但需要两倍于Q8版本的计算机资源。
文件名中带有dll的版本包括ImageMagick库作为动态链接库。
除非你的电脑是Windows32位操作系统,否则建议使用64位的Windows ImageMagick。
关于Q8,Q16的说明:
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
使用16-bit在处理图片时比8-bit慢15%至50%,并须要更多的内存。比如处理一张1024x768像素的图片8-bit要使用3.6M内存,16-bit要使用7.2M内存。
计算方法是: (5 * Quantum Depth * Rows * Columns) / 8
8-bit可表示0-255种值,16-bit可表示0-65535种值。默认值是8-bit。大多数电脑显示使用8-bit per pixel quantums。现代数码相机照的相片,每一种颜色就是8位深,3种颜色就是24位,选Q8的话也可以满足使用要求,同时可节省计算机资源。
这里我们选择下载官方推荐的文件,也就是第一个:ImageMagick-7.0.8-12-Q16-x64-dll.exe
下载到桌面上的文件:

安装
选择好安装目录后,一直点Next就行,安装完图标。这个7.0版本的安装选项和之前的6点几版本有些不同,系统环境变量都是自动配置好的。

使用图形程序使用

图形程序中涉及到的图片操作菜单主要是View和Transform,下面简单介绍翻译下这两个菜单。


Half Size一半大小
Original Size原始尺寸
Double Size双倍尺寸
Resize...自定义尺寸
Toolbar工具栏
Status Bar状态栏
Crop裁切,保留所选部分Rol
Chop裁切,去掉所选部分,然后把剩余的图片进行拼接
Filp上下翻转
Flop左右翻转
Rotate Right向右旋转90度
Rotate Left向左旋转90度
Rotate...旋转指定度数
Shear...设置X轴角度和Y轴角度
Roll...设置水平像素和垂直像素
Trim Edges修剪边缘
命令行使用
上面说过,IM的大部分功能都是基于命令行使用的,所以最全的使用方式应该是命令行方式。
各个命令的详细说明可以直接参考这个地址:https://www.w3cschool.cn/imagemagick_use/
参考官方说明:

IM命令行结构剖析:
ImageMagick命令行包含
1、一个或多个必需输入的文件名。
2、零个,一个或多个图像设置。
3、零个,一个或多个图像运算符。
4、零个,一个或多个图像序列运算符。
5、零个,一个或多个图像堆栈。
6、零个或一个输出图像文件名。(convert,composite,montage,compare,import,conjure,这些命令需要)
注意:直接写convert,如果命令行如果提示找不到convert命令的话,把目录下的magick.exe拷贝一份命名convert.exe,这样就可以直接使用convert了,不用写magick了
IM命令行的简单使用:
打开CMD命令行窗口,进入图片所在目录(我的测试图片在桌面的test文件夹里)
C:\Users\Administrator>cd C:\Users\Administrator\Desktop\testC:\Users\Administrator\Desktop\test>magick test.jpg test1.png
magick test.jpg test1.png表示把test.jpg这个图片另存一份为test1.png,同时修改了图片名称和格式。

magick label.gif +matte \
\( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \
\( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \
-delete 0 +swap -compose Multiply -composite button.gif");
上面的命令是在Linux下的写法,命令足够长,必须跨多行写入,Linux使用的是\,Windows使用的是^,另外Windows下的命令行中对于括号不需要转义,则命令格式如下:
magick label.gif +matte ^
( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite ) ^
( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte ) ^
-delete 0 +swap -compose Multiply -composite button.gif
上面的命令对图片纹理进行了丰富和色彩进行了加深。

magick *.jpg images.gif
将当前目录下所有jpg图片合成一个gif动画,我合成了个静态图片
magick -size 640x480 -depth 8 rgb:image image.png
后面还有好多的命令,详细信息请参考官方网站说明。
程序接口使用
这里只说一下Java相关的工具。Java可调用接口有两种,JMagick和Im4java。JMagick为ImageMagick提供了面向对象的Java接口。Im4java是ImageMagick命令行的纯java接口。
1、JMagick
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagic API的一部分功能,它的发行遵循LGPL协议。
目前JMagick只有32位的,所以只能选择32位的ImageMagick,并且版本支持很低,目前只支持到ImageMagick-6.3.9-0,只能使用32位的JDK,64位进程不能够调用32位的dll,想在64位的系统上用jmagick不仅要将jdk换成32位,而且jmagick.dll也得放到SysWOW64下面,不能放到System32中。
具体使用可参考我的另一篇博客:JMagic 操作 ImageMagick 处理图片
2、Im4java
Im4java是ImageMagick的另一个Java开源接口。与JMagick不同之处在于Im4java只是生成与ImageMagick相对应的命令行,然后将生成的命令行传至选中的IM-command(使用java.lang.ProcessBuilder.start()实现)来执行相应的操作。它支持大部分ImageMagick命令,可以针对不同组的图片多次复用同一个命令行。
Im4java只是封装ImageMagick的命令。所以不需要依赖dll,也不存在64位系统调用32位dll的问题,而且Im4java支持GraphicsMagick,GraphicsMagick是ImageMagick的分支。且Flickr和Etsy都要使用它。相对ImageMagick,GraphicsMagick更稳定,消耗资源更少。最重要的是不依赖dll环境。
具体使用可参考我的另一篇博客:Im4java 操作 ImageMagick 处理图片






