图片处理服务 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\test

C:\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 处理图片

posted @ 2018-10-16 12:51  一线大码  Views(32168)  Comments(1Edit  收藏  举报