ImageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。ImageMagick是一个旨在读,写和操纵许多流行的图像格式的工具,包括GIF, JPEG, PNG, PDF,图像和Photo CD。使用ImageMagick,你可以创建动态的GIF,使这个软件制作适合于Web应用程序的图片。
您还可以调整大小,旋转,锐化,减少颜色,或添加特殊效果,图像和保存完成的工作在相同或不同的图像格式。
它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。
尽管大多数网页中的例子都是用"convert"命令来处理图像,还有很多其它的ImageMagick命令,我将在下文中简单介绍。
其中的某些命令不能在网页中正常的演示,我会给你这些命令的要点和技巧,尽管不能在这里显示其生成的效果。convert——转换和修改图像
"convert"命令是ImageMagick的主要命令,几乎网页中所有的例子都使用这个命令。因此,我不在这里详述这个命令,而是介绍下这个命令的历史。
这个命令起源于IM初创期,用来转换图片格式,如今还是这个功能,这也就是被称为转换的原因。
这个命令可能都不读取内存中的图像,而是使用IM之外的辅助Delegate程序直接转换。这种完全外在的形式已经随着时间的推移淡出使用,也较少被需要,除了作为读取和写出复杂的图像文件格式的方式。
在一段时间内,该命令被添加了一些额外的图像处理功能,使这个命令在转换不同甚至是相同的图像格式时,产生了轻微的变化。这些一般是简单的选项,但是在IM的版本5中,这些图像处理功能被扩展了,成为了"convert"命令比进行图像转换更为重要的功能。
因为有各种各样的选项,各种各样的选项在运行的时候,会因为运行顺序的不同而产生各种奇怪而不可控的结果。当多个图像处理选项被使用时,IM因不稳定且不可控而开始失宠。
IM版本6见证了图像处理方式从'options'方式转变为'do it as you see it'方式,图像处理功能变得稳定且可预测,IM的命令行变得有用了多个数量级。
源于此,"convert"再也不是仅仅转换图片格式,而成为了访问图像处理功能的命令行API,如以非常复杂的方式创建和修改图像,而不需要图像处理的学位,或者以计算机语言(如Perl, PHP, 或 C)编程。当然,一些shell脚本的知识是有用的,但也不是严格要求。
全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。
Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。这使得自动的动态的修改创建图片变为可能。
A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, FAX, FITS, FPX, FRACTAL, G, G3, GIF, GIF87, GRADIENT, GRAY, HDF, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, MPG, MSL, MTV, MVG, NULL, O, OTB, P7, PAL, PALM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PFA, PFB, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, TIF, TIFF, TILE, TIM, TTC, TTF, TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, XBM, XC, XCF, XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV..
命令行样式改变的原因(或者叫IM以前的版本存在的问题)。
在ImageMagick以前的版本(版本5.5.7及更早的版本)中,命令行界面连接IM的程序库倾向于使用命令参数呈现的顺序。但这是非常随机的,也让所有试图弄清软件究竟是如何运行的人感到困惑。另外,运行成功的命令可能在下一次不能运行,但作为IM的创始人,始终不懈地改进接口,以让它像人们所期望的那样工作。
问题的根源在于ImageMagick所遵循的是相当标准的UNIX命令行处理格式
command [options] input_image output_image
随着时间的推移这也开始产生问题,因为图像处理是会进行大量操作,且对其执行的操作往往涉及多个图像的复杂对象。基于这个原因,命令行处理样式也开始改变。
command [options] image1 [options] image2 [options] output_image
这个能够在新版的软件中运行,并且是版本5.5.7中所使用的基本样式。
各种各样的图像操作参数如“-negate”、“-resize”和“-crop”等,会在图像导入之前或者之后使用。
例如,在版本5.5.7中,以下两条命令都是可行的并且可以达到同样的目的:
convert -negate image.gif output.gif
convert image.gif -negate output.gif
问题是如果进行两个图像处理操作,例如:
convert -size 40x20 xc:red xc:blue \
-append -rotate 90 append_rotate.gif
在版本5.5.7中的结果是:这两个图像首先将被旋转,然后连接到一起,将产生如下的图像。这说明"-rotate"操作将在"-append"之前进行,而这可能并不是使用者所预想的。
而在ImageMagick版本6中,操作将永远按照使用者所给定的命令行顺序运行。这样之前的例子在版本6中,两个图像将首先被连接到一起,然后得到的图像将进行旋转,产生的图像为:
如果使用者想在两个图像连接到一起之前旋转,他可以明确地要求IM版本6按如下顺序操作:
convert -size 40x20 xc:red xc:blue \
-rotate 90 -append append_rotate_bad.gif
这种良好的控制方式超越了IM之前的版本,只是可能额外需要一个管道或者介质保存图像来实现。
要解决这个问题,需要大量的工作并克服兼容性的问题。但另一方面则是解决了在版本5中所应用的简单命令无法如版本6那样符合我们预期的运行。
实质上,命令行的用法在版本6之前的版本中并未界定清楚,在我们的定向思维被打破之前,产生了许多奇怪和意外的结果。