如何禁用imagemagick convert

ImageMagick 使用经验
ImageMagick 使用经验
1.如何用ImageMagic水平或垂直拼接图片 因为是分片下载的,现在只能用montage拼接图片列阵,但如何水平拼接一组等高的图片 或如何垂直拼接一组等宽的图片呢?
montage *.jpg
-tile 22x2
-geometry 64x256+0+0 10-.jpg
将目录里的jpg文件按顺序拼成x轴22块,y轴2块的图 ,每个图块的大小为64X512像素,输出文件为10-.jpg
你可以把22*2改成你想要得值,例如你形成的图x轴有50个快,y轴有30个块,你可以写成50x30
把你所有要合成的文件拷在一个目录里,用一个命令就可以合成
convert +append 1.jpg 2.jpg 3.jpg .... 0.jpg
把 1.jpg、2.jpg、3.jpg等多张图片沿“水平方向”( +append)拼成 0.jpg(最后一个文件名是拼出的成品)
convert -append 1.jpg 2.jpg 3.jpg .... 0.jpg
把 1.jpg、2.jpg、3.jpg等多张图片沿“垂直方向”( -append)拼成 0.jpg(最后一个文件名是拼出的成品)
可以分两步,第一步把小图拼成多个水平方向的长条,第二步把长条按垂直方向合并成一个大图。
3.切割图片
convert -crop 128x128 1.jpg 0.jpg
把大图1.jpg按128x128分割成了多张小图0-1.jpg
0-2.jpg ...
convert -crop 128x64+6+7 1.jpg 0.jpg
从1.jpg 以座标 6,7 为起点切一片 128x64 的块生成 0.jpg
ImageMagick 方法:
convert -sharpen 5 0.jpg 1.jpg
将0.jpg 锐化后生成1.jpg,锐化指数5,此数值越大,锐化度越高,图像细节损失越大
4. 如何让animate在显示图片的过程保持窗口的标题不变?
animate -title "My Image Sequence" images.
5. import抓得的图片与X服务器上显示的不一致怎么办?
import -descend image.miff
6. 如何动画显示YUV 图片序列?
animate -geometry 352x240 -scene 0-71 yuv3:frame%d
7. 如果只看一个RGB图片的红色通道(red channel)?
display -gamma 1.0,0.0,0.0 image.miff
8. 如何改变PostScript默认纸张大小?
要改变默认的612x792大小,修改magick/image.h中的PSPageGeometry的值并重编译.
10. 如何自左至右无边无框无文字半三幅画连接在一起?
convert +append image1.ppm image2.ppm image3.ppm side_by_side.miff
convert -size 350x500 xc:black composite.miff
composite -geometry +0+0 composite.miff image1.gif composite.miff
composite -geometry +100+0 composite.miff image2.gif composite.miff
composite -geometry +0+300 composite.miff image3.gif composite.miff
composite -geometry +0+375 composite.miff image4.gif composite.miff
11. 如何生成gif动画?
convert -delay 20 frame*.gif animation.gif
convert -delay 20 frame1.gif -delay 10 frame2.gif -delay 5 frame3.gif animation.gif
convert frame1.gif -page +50+100 frame2.gif -page +0+100 frame3.gif animation.gif
convert -loop 50 frame*.gif animation.gif
convert +adjoin images.* frames%d.gif
12. 如果完整的显示PostScript图片?
display -page letter image.ps
13. 什么是图片目录?如何使用它们?
图片目录(visual image directory ,VID)的创建:
montage *.jpg directory.vid
convert 'vid:*.jpg' directory.vid
显示图片目录
display directory.vid
display vid:movie.mpg
15. 如果带框架保存一个窗口?
xwininfo -frame
import -frame -window ID window.miff
16. 图片以单一颜色(a solid color)显示,是怎么回事?
图片被破坏,或含有值为0的matte层,试着:
display +matte image.miff
17. 出现 "???? library is not available ..."是怎么回事?
没安装相关的函数库。参见安装说明。
18. 如何查看图片不光滑层(matte channel)的值?
convert image.tiff image.matte
display -size 640x480 gray:image.matte
19. 运行"Convert in.gif out.png" 时显示 "Invalid Parameter - out.png"
你运行的convert是windows的分区类型转换程序。
20. 如何在图片增加斜角?
对图片边缘的处理共分四类。
1)增加有色边
convert -bordercolor red -border 25x25 image.jpg image.gif
2)加亮或变暗图片边缘,以增强3D效果
convert -raise 25 image.jpg image.gif
3)在图片周围增加装饰性框架。
convert -mattecolor gray -frame 25x25 image.jpg image.gif
4)在图片边缘增加升、降斜角
convert -mattecolor gray -frame 25x25+0+25 image.jpg image.gif
convert -mattecolor gray -frame 25x25+25+0 image.jpg image.gif
21. 用窗口管理器运行display失败了,怎么办?
用下列命令之一来确认display运行在一个交互环境中:
display logo:Untitled
display & /dev/console
22. 将PostScript文件转换为其它格式时,如何改善文字的外观?
convert -density 288 -geometry 25% image.ps image.gif
23. 如何用2-3英寸高的文字注释一个图片?
先检查有无可缩放字体:
xlsfonts -fn '*-0-0-0-0-*'
convert -font '-*-helvetica-*-*-*--300-300-*-*-*-*-iso8859-1' -fill green -draw 'text 50,300 Magick' image.gif annotated.gif
If you have the FreeType support built into ImageMagick, just increase your pointsize and/or density:
convert -font Helvetica -pointsize 100 -density 300 ...
24. 如何将gif文件分析为一系列的单个图片?
convert animation.gif frame%02d.gif
25. 用NetScape显示的图片,如何去掉周围的背景色?
对convert用+page参数:
convert +page alpha.gif beta.gif
26. 如何用web安全的颜色(Web safe colors)创建GIF或PNG图片?
对convert用 -map 参数:
convert -map netscape: alpha.gif beta.gif
27. 为何Adobe Acrobat 2.1不能读ImageMagick's制作的PDF?
用 Acrobat 3.0或以上版本,来阅读这种经zip压缩的pdf,或制作PDF时不进行压缩。
convert +compress images.tiff image.pdf
28. 如何在图片上增加一个不光滑层(matte channel)?
convert image.gif -matte temp.miff
composite -compose CopyOpacity mask.xbm temp.miff transparent.gif
29. 在NT环境下如何用convert在图片上写字?
convert -font Arial -fill blue -draw "text 10,10 'your text here'" d:test.tif png:d:test.png
convert.exe -pointsize 18 -draw "text 0,0 "This is my text!"" C:blank.gif c:text.gif
30. 为何GIF文件比期望的大?
需要在编译源码时加 --enable-lzw 参数,来打开LZW压缩功能。
31. 为何JPEG文件比期望的大?
可能嵌入Exif或IPTC等"profiles", 或者含有没压缩的thumbnails. 可以用命令行参数 +profile "*"或相关的API来将它们去掉。
32. 如何从图片文件中抽取第一张图片?
convert "Image.gif[0]" first.gif
33. 如何创建一张空白图片?
convert -size 800x600 xc:"#ddddff" ltblue.ppm
convert -size 800x600 null:white white.ppm
convert in.png -threshold 100% black.ppm &--与in.png同大小& p=""&
34 在一副图片中裁切其中一部分
convert -crop 20x20+10+10 1.jpg 2.jpg
宽x(英文字母小写x)高+x值+y值
切出图片大小范围 起始xy坐标
35 把图片缩小到固定大小
convert -resize 20x20 1.jpg 2.jpg
宽x(英文字母小写x)高
变化出的图片大小范围
36 图片增加光亮度,饱和度,色彩
convert -modulate 150,150,150 1.jpg 2.jpg
brightness,saturation,hue
37 增加饱和度
convert -contrast 1.jpg 2.jpg 加深1倍
convert -contrast -contrast 1.jpg 2.jpg 加深2倍
convert +contrast 1.jpg 2.jpg 变浅1倍
convert +contrast +contrast 1.jpg 2.jpg 变浅2倍
38 单纯旋转角度
正值是顺时针 负值是逆时针
convert -rotate 30 origin.jpg dog.jpg
convert -rotate -30 origin.jpg dog.jpg
convert -blur 80 foo.jpg foo.png-blur
参数还可以这样-blur 80×5。后面的那个5表示的是Sigma的值,这个是图像术语,我也不太清楚,总之,它的值对模糊的效果起关键的作用。
上下翻转:
convert -flip foo.png bar.png
左右翻转:
convert -flop foo.png bar.png
形成底片的样子:
convert -negate foo.png bar.png
把图片变为黑白颜色:
convert -monochrome foo.png bar.png
convert -noise 3 foo.png bar.png
44 油画效果
我们可用这个功能,把一张普通的图片,变成一张油画,效果非常的逼真
convert -paint 4 foo.png bar.png
把一张图片,旋转一定的角度:
convert -rotate 30 foo.png bar.png
上面的30,表示向右旋转30度,如果要向左旋转,度数就是负数。
46 炭笔效果
convert -charcoal 2 foo.png bar.png
形成炭笔或者说是铅笔画的效果。
毛玻璃效果:
convert -spread 30 foo.png bar.png
以图片的中心作为参照,把图片扭转,形成漩涡的效果:
convert -swirl 67 foo.png bar.png
49 凸起效果
用-raise来创建凸边:
convert -raise 5×5 foo.png bar.png
执行后,你会看到,照片的四周会一个5×5的边,如果你要一个凹下去的边,把-raise改为+raise就可以了。其实凸边和凹边看起来区别并不是很大。
其他功能都是不太常用的,如果你感兴趣的话,可以看它的联机文档
50. 图片翻转后添加背景色
convert -rotate 45 -background #FFB6C1 origin.jpg or.jpg
import是一个用于屏幕截图的组件,下面列出的是我们常用的功能,其他的功能,你参考它的man好了。
截取屏幕的任一矩形区域
import foo.png在输入上述的命令后,你的鼠标会变成一个十字,这个时候,你只要在想要截取的地方划一个矩形就可以了
截取程序的窗口
import -pause 3 -frame foo.png
回 车后,用鼠标在你想截的窗口上点一下即可。参数-frame的作用是告诉import,截图的时候把目标窗口的外框架带上,参数-pause的作用很重 要,你可以试着把它去掉,对比一下,你会发现,目标窗口的标题栏是灰色的,pause就是让import稍微延迟一下,等你的目标窗口获得焦点了,才开始 截图,这样的图才比较自然。
截取一个倾斜的窗口
如果想让你的截图比较cool,你可以把截取一个倾斜的窗口,方法如下:
import -rotate 30 -pause 3 -frame foo.png
截取整个屏幕
import -pause 3 -window root screen.png
注意,暂停了3秒钟,你需要在3秒钟内切换到需要截取的画面噢。
display应该是我们使用的最为频繁的图像处理软件了,毕竟,还是看的多
display foo.png
如果你要显示多个文件,你可以使用通配符
display *.png
display -delay 5 *
每隔5个百分之秒显示一张图片
一些快捷键
space(空格): 显示下一张图片
backspace(回删键):显示上一张图片
h: 水平翻转
v: 垂直翻转
/:顺时针旋转90度
:逆时针旋转90度
F7:模糊图片
Alt+s:把图片中间的像素旋转
Ctrl+s:图象另存
Ctrl+d:删除图片
/*************************************************************************************************
/*************************************************************************************************
/*************************************************************************************************
/*************************************************************************************************
/*************************************************************************************************
下面还是让我们来把几个 EmacsColorTheme 的抓图制作成几张叠加的照片的
效果。首先分别设定几个 color-theme ,然后分别建立抓图:
代码:import -frame 1.png
import -frame 2.png
import -frame 3.png
import -frame 4.png
抓的图片太大了,让我们先把他们缩小一点吧:
代码:for file in *. do
convert $file -resize 400x $file
好了,现在让我们来制作相片的边框,其实就是先加一个白色的边框,再加一个
灰色的边框,先用产生一个小一点的图来试验一下吧:
代码:convert 1.png -resize 100x100 -bordercolor white -border 6
-bordercolor grey60 -border 1 1-border.png
OK!这样就是边框了,如图所示:
这样还不够 cool ,让我们来产生一点阴影:
代码:convert 1-border.png -shadow 60x4+4+4 1-shadow.png
这样就产生了阴影:
接下来要做的是把阴影和原来的图形融合到一起:
代码:convert 1-shadow.png 1-border.png -background none
-mosaic 1-border-shadow.png
把上面的步骤连在一起做就是:
代码:convert 1.png -resize 100x100
-bordercolor white -border 6
-bordercolor grey60 -border 1
( +clone -shadow 60x4+4+4 )
+swap -background none -mosaic
1-border-shadow.png
好了,知道如何制作边框了,现在要把几张“照片”组合在一起,让我们再用同样
的办法产生一个 2-border-shadow.png ,然后把一张旋转一下,移动一点,然
后把他们组合在一起:
代码:convert 1-border-shadow.png
( -page 20x30 2-border-shadow.png
-background none -rotate 30 )
-background none -mosaic mosaic.png
好了!这就是基本流程,用类似的办法,我们可以把四张“照片”组合在一起了,
而且我决定最后才加上阴影,而不是每一张都加阴影:
convert ( -page +0+40 1.png
-bordercolor white -border 6
-bordercolor grey60 -border 1
-background none -rotate -5 )
( -page +30+0 2.png
-bordercolor white -border 6
-bordercolor grey60 -border 1
-background none -rotate 20 )
( -page +10+40 3.png
-bordercolor white -border 6
-bordercolor grey60 -border 1
-background none -rotate 40 )
发表评论:
TA的最新馆藏[转]&【基础】imagemagick简介及基本使用_imagemagick吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:16贴子:
【基础】imagemagick简介及基本使用
ImageMagick开源项目是一套功能强大、稳定、免费和开源的图形图像处理工具集和开发包。可以用来读写和处理超过100种不同格式的图片文件,包括现今最流行的DPX、EXR、GIF、JPEG、JPEG-2000、PDF、PhotoCD、PNG、Postscript、SVG、TIFF等格式。利用ImageMagick你可以根据需要动态生成图片,对单张(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,还可以将图片在不同格式之间进行转换。你能想到的和不能想到的图像处理方式,使用ImageMagick你都可以完成!
在对图片的操作方式上,ImageMagick不同于其它图像处理软件,而是通过命令行的方式来执行处理命令,这种接近底层的操作方式,不仅可以对图片进行更加多样、自由和丰富的处理,满足使用者的任何个性需求,同时也为程序开发者带来了福音,让我们的程序可以拥有更加强大的图形图像处理能力,ImageMagick还特别为此提供了极其方便友好的开发接口。
正版授权奇迹MU页游,奇迹重生!原汁原味还原奇迹,十年轮回!
ImageMagick的命令行处理介绍命令行样式改变的原因(或者叫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
output.gifconvert
output.gif
问题是如果进行两个图像处理操作,例如: convert -size 40x20 xc:red
-rotate 90
append_rotate.gif
在版本5.5.7中的结果是:这两个图像首先将被旋转,然后连接到一起,将产生如下的图像。这说明"-rotate"操作将在"-append"之前进行,而这可能并不是使用者所预想的。
而在ImageMagick版本6中,操作将永远按照使用者所给定的命令行顺序运行。这样之前的例子在版本6中,两个图像将首先被连接到一起,然后得到的图像将进行旋转,产生的图像为:
如果使用者想在两个图像连接到一起之前旋转,他可以明确地要求IM版本6按如下顺序操作: convert -size 40x20 xc:red
-rotate 90
append_rotate_bad.gif
这种良好的控制方式超越了IM之前的版本,只是可能额外需要一个管道或者介质保存图像来实现。要解决这个问题,需要大量的工作并克服兼容性的问题。但另一方面则是解决了在版本5中所应用的简单命令无法如版本6那样符合我们预期的运行。实质上,命令行的用法在版本6之前的版本中并未界定清楚,在我们的定向思维被打破之前,产生了许多奇怪和意外的结果。
IMv6命令句法在操作图像之前,至少应该有一个图像被读取或者创建,事实上你也可能考虑将图像的读取或者创建看作同一个操作。这意味着IMv6的句法可以简化为:command { [-setting]... "image"|-operation }... "output_image"{...}表示根据你的需要引入多次图像读取或操作,并根据命令顺序对图像进行处理。选项类型——操作符和设置可以从The Anatomy of the Command Line的 ImageMagick Website 中获得下文的总结。所有命令行选项都可以分成以下的设置选项和图像操作符两类,设置选项设定相关的参数值,而操作符则实际上预制一些功能。设置选项:是在其它图像操作之后使用,仅储存信息的命令行选项。这也就意味着它仅仅是设定相关的参数值供之后使用。其中许多的选项都有一个“+”和一个“-”的样式。后者通常是用来关闭设置,或将其重置为默认状态,这使得操作者能迅速且简单取消设置的效果。例如“+gravity”将使重力的设置恢复到其最初的没有重力的状态。设置又可以进一步划分为多个子类别。操作设置:控制着后续的操作如何运行。操作设置设定颜色、操作者所使用的字体、图像和文本的放置、源图像中颜色的查找、更为复杂的操作的处理方法等等。-dither
-background
-bordercolor
-pointsize
-strokewidth
-virtual-pixel
-interpolate 绝大多数的设置选项都属于这一类别。输入设置:专门控制被创建或者读取的图像的生成。它们通常被用来分配和重写与设定产生的图像相关联的特定元数据。它们从外部文件中创建或者读取。-label
-size 要注意的是,这些都只会在图像被创建或者读取之后才会执行。“-set”这个特殊的操作将在图像被读到内存或者经过其他处理之后更改图像的元数据,可以从下面的Meta-Data中获取更为详细的相关信息。输出设置:只在写入或保存图像到磁盘时使用。尽管它可以在命令行中的任意位置出现,也只是在图像被写入时才被使用,通过作为默认的图像文件名来实现,或者通过“-write”或“-identify”操作。-quality
-compression
-transparent-color 如果没有设置,或者通过“+”的形式关闭,将使用其相应的默认形式。这个默认形式通常是被读取的最后一个图像保留下来的参数。如果文件格式要求,诸如“-background”色等的操作也将被指派到图像中。控制和调试设置:控制着IM如何执行其任务,包括:-verbose
-regard-warnings有关这些特殊设置的详细信息见下面的 IM Operation Controls。图像操作符:是修改图像的命令行参数,当这一命令出现的时候将被立即执行,并且可能使用在命令行出现过的其它的设定选项。这些操作符可以被分为一些子类别:图像生成操作符:将从文件或其它介质中读取图像或生成新的图像,这些包括:image.png
radial-gradient:
text: 作为操作符,它们同样地在命令行中出现的时候将立即被执行,但只是添加新的图像到内存中,而不会改动以前读取过的图像。当然,作为操作符,之前所定义的任何设置都将被应用,特别是控制文件和文件流输入的输入设置。例如,“-size”确定了你想创建的图像的大小,而如“-delay”和“-page”则定义和重写元数据。简单图像处理操作符:将修改所有被读到内存中的图像,并且每一个图像都被单独修改。包括:-crop
-thumbnail
-adaptive-resize
-liquid-resize
-morpohology
-sparse-color
-transpose
-transverse
-gaussian-blur
--radial-blur
-motion-blur
-adaptive-sharpen
-adaptive-blur
-despeckle
-level-color
-auto-level
-auto-gamma
-sigmoidial-contrast
-normalize
-linear-stretch
-contrast-stretch
-sepia-tone
-transparent
-ordered-dither
-random-dither
-emboss -shade
-colorspace
-separate 由于当图像操作符出现的时候就会被立即执行,所以应该出现在图像已经被读取到内存之后。如果不止一个图像被呈现,这些图像将一个一个按顺序操作。因此对在当前图像序列中是哪些图像应该十分谨慎。这些操作符生成多个图像是极有可能的。例如“-crop”可以生成多个图像的源代码,“-separate”则将图像拆分为单独通道的图像,因此有可能在内存中得到更多的图像,但是所有这些操作符一次只针对一个图像。而许多API的等效操作只针对图像列表中的第一个图像,也就是说它们不会遍历每个图像。但转换和其他CLI命令,则是按顺序遍历图像序列中的每个图像。多图像序列操作符:的特殊在于它们将当前的图像序列当做一个整体进行修改。它们可以以一个单独的组合图像替换整个图像列表,或者根据前后的图像对该图像进行修改。它们使用于阿尔法通道、动画处理和颜色通道处理等。-append
-composite
-evaluate-sequence 因为图像序列是被作为一个整体在进行处理,一些图像将被删除或者替换,上述大部分的操作符最终将多个图像合并为单个图像。Layers composite方法是目前唯一的能将当前的图像序列拆分为两个完全不同的图像序列,然后将它们合并为新的图像序列的操作符。这种拆分基于一个特殊的空:图像标记。这些操作符都不能使用于"mogrify"命令,因为这个命令将一系列输入的图像作为单个图像进行处理。图像堆栈操作符:影响内存中当前图像的顺序以供处理,它们和之前的Image Sequence Operator在很多方面都很相似,但是它们并不对图像本身进行处理,而只是调整图像的顺序。(
-duplicate
-clone 其中的圆括号可能需要应用反向斜线或者引用,防止CLI赋予任何特殊的含义。这些操作符都不能使用于“mogrify”命令,因为这个命令将一系列输入的图像作为单个图像进行处理。各种各样的特殊操作符:和之前的操作符相比,是显得不同寻常或不标准的。-geometry
-concurrent
-preview “-geometry”是是唯一一个仅仅影响图像序列中的一个图像(最后一个图像)的而不是影响所有的图像操作符。它仅适用于向后兼容性和特殊的阿尔法通道要求,请见 Geometry, resize just the last image,已获得更多的信息。“-version”和“-list”是信息生成操作符,并使IM在返回请求信息之后退出。请见下面的 IM Special Controls,以获得更多关于这些选项的信息。有一些选项能够使整个命令多次执行,基本上以某些奇怪而又不寻常的方式特殊地处理。通常,除了某些特殊情形或者恢复特定的全局信息,这些操纵符都不被用到。我希望选项是被明确的分为设置和操作符,因为这对IM的运行至关重要。记住这是在ImageMagick版本6中。设置将以某种方式保存供以后使用,而操作符立即运用到图像。这是版本6和之前的所有版本都不同的原因之所在。所有的选项都被定义为设置或者操作符,定义的顺序决定了该选项在什么时候,在什么图像中使用。IM Examples Options Reference 可用来区分设置和操作符。
IM命令的运行示例让我们来看一个IM版本6是如何运行的范例。 convert
eye.gif news.gif -append
storm.gif tree.gif \-background skyblue +append
result.gif
让我们分解下这个命令来看看IM版本6究竟是如何运行的。参数操作效果 参数
初始化并创建一个空的图像序列
空的图像序列
读取图像,并将图像添加到当前图像序列的末端
在序列中添加第二个图像(现在有了两个图像)
将当前序列中所有的图像垂直连接在一起所有图像被单个图像替代
1个合并的图像
在图像序列中添加一个图像
再添加一个
-background skyblue
设置背景颜色供之后使用,不对图像做任何更改
将3个图像水平连接,用背景色填充空白区域
1 个合并的图像
result.gif
作为最后一个参数,它完成的功能就是将图像信息写入文件中。图像序列中的单张图像将会写入这个给定的文件名和格式的图像文件中
正如我们所看到的,ImageMagick版本6当中的操作非常直截了当和有逻辑性,使操作的结果可以预知,这就是关键之所在。 传统的命令行样式由于大量的IM的脚本都使用单个的图像操作符command -operator input_image output_image在读取图像之前就应该确定要使用的操作符。在处理这种传统情况时,IM将所有出现过的图像操作符储存起来,当在命令行中出现的时候,就会应用到第一个图像。当你写下如下命令时这些会运行:command input_image -operator output_image例如这个传统命令:
cmd_flip_legacy.gif
和版本6中的这个命令生成的结果是相同的: convert
storm.gif -flip
cmd_flip_postfix.gif
这些传统的命令样式也可以运行,但是存在和版本5中同样的问题。所有的设置都适用于第一次读取之前,而所有的操作符都存储着直至第一个图像被读取之后使用(只针对第一个图像)。也不能保证多个操作符运行的顺序会与你写入时的顺序相同。此外,所有的操作符都被存储起来,直至第一个图像被读取,才会全部应用,在读取图像之前多次重复一个命令,可能导致一些早期命令消失,这不是一个错误,但是是对IM传统功能的一个错误使用。这种样式的命令行只有老版本支持,所以并不推荐使用,因此如果可能的话,应该尽可能地避免使用。任何包含这种传统样式的脚本,都应该在将要使用的操作符之前进行更新。 这种老版本不会在IM版本7中出现,IM版本7的计划包括命令行单通道处理,这反过来将允许从文件和管道读取图像处理选项的使用。但是单通道处理技术并不会允许操作者在读取文件之前使用,如果使用的话,可能会产生无图像的错误。
命令行vs APIIM的命令行和Magick API的PerlMagick, RMagick, PHP IMagick 和 MagickWand等存在很多区别。只有一个图像列表或序列在命令行只能有一个可在任何一个时刻处理的图像列表或序列。操作者可临时增加或者保存一个图像(见Parenthesis和MPR: Named Memory Registers),甚至可以克隆入栈后的图像序列,但是不能同时对两个图像序列进行处理。而API的语言则允许操作者有多个单独的图像列表,为了更好地处理图像,通常将每个图像都单独保存为序列,只有当需要的时候才把这些单独的图像序列合并到一起或者是作为操作的最后一步。也可以按任意顺序操作,并将其存储到数据库或者其它数据工具,用于排序或者以后比较。在命令行中,只有一个图像列表意味着不能按任意顺序操作,而是按照逻辑顺序,完成所有的图像处理步骤。这意味着返回或者后来再进行修改、对图像序列处理之后的结果进行按照不同的顺序来进行修改比较困难,将两个完全单独的图像列表合并成一个逻辑整体尤为困难,但是可以让操作者在命令行中完成此操作的技术已经出现。像素数据直接访问同样的,可以从命令行中对图像进行一些数学处理或者合并像素数据,但是不能轻松地使用命令行界面查找属性、读取或修改特定像素和区域。你可以使用特殊的 FX Image Operator对图像的像素进行合并或者修改,但是一般只限于转换整个图像,而且非常慢。为方便 FX Image Operator用户使用,许多常见操作被内置入IM,创建了Color Lookup Tables, Evaluate Math Functions, Multi Argument Functions和General Image Distortion Operator以及一些特殊的Image Composition Methods。API's则以更为直观的方式处理图像,使用户能更容易地以API提供的额定频率自制单独的一套操作。
条件处理IM的命令行界面不能轻松地对某些具有图像派生属性的图像进行修改,例如它很难基于图像是使用了浅色背景还是深色背景来进行差别处理。你可以运用 FX Image Operator来进行有限的特定的条件处理,或者在特定条件下调整一个图像的方向,或者利用放大和缩小来改变图像,但这些只是处理特殊的和众所周知的处理条件。进行条件处理唯一真正实用的方法是使用单独命令和临时文件。此示例请参阅注释良好的Jigsaw Script。API's将所有相关图片存储在内存中,当需要的时候,在特定情况下,能进行这种类型的条件操作。遍历处理你不能仅仅以一种特定的方式对图像进行遍历,也不能轻松地修改正在处理的图像序列中的图像。也就是说,你不能简单地根据每个图像的编号或者以前图像处理的结果来进行不同的处理。例如绘制不同大小的图像,逐渐模糊图像,或以单一的命令生成一个动画序列。你可以在一个图像序列中修改特定图像,示例见 Frame by Frame Modification of an Animation。但是你必须知道该图像列表中有多少图像。在命令行中遍历图像的唯一真正实用的方法是将单个的图像写成单独的图像文件(见Writing a Multi-Image Sequence),然后在外部脚本循环中一个个处理。示例见Divide an Image Vertically中的shell脚本。或者可以使用shell 脚本循环来生成图像,并通过管道将结果合并到最终的图像或者图像序列。示例见Layered Images Examples中的shell脚本,或者各种 Warped Image Animations中的shell脚本生成器。API's在多个图像遍历中没有任何问题,无论是在一个单一的图像序列,还是多个单独的图像序列,甚至是一个数组或者数据结构的图像序列。它还可以保存内存中的所有图像,供图像最后的结合步,无需管道输送,或使用临时文件。如果你的应用需要进行这些操作(尽管很少的应用需要这些),API也许是一个不错的选择。“conjure”程序(见下)的最初目的是为了ImageMagick更好的脚本运行,使之能够处理多个图像列表。改进了的IM版本6几乎让试验中的API废用,虽然它还可得并且在不断改进。参数处理除了文件名和命令行选项,只有几个基本的选项参数样式在被使用:常量名(对于特定的设置和方法类型)常量名列表(例如两种颜色或者渠道)几何参数(带标记数字的特殊格式化列表)浮点列表(有时百分号转义)自由字符串(百分号转义)
常量名常量名是特定的字符串常量用于查找内部的可能被一个选项用到的设置的程序库。例如“-gravity”设置可以接受任何9个不同的设置,一旦设定,这个设置将被所有的图像处理操作运用,例如“North”、“East”或者“NorthEast”的设置。你可以通过 List Operational Option (见下)获得所有有效设置的列表,如使用以下命令: convert -list gravity
只有特定的设置是允许的,如果你尝试使用其它的设置,将得到错误,例如: convert xc: -gravity Invalid
在IM中,设置可以以不同的方式指定,所有的这些都是有效的。例如,设置中可以指定大写、小写或两者的组合。单个词语(在"-list"中指定为大写字母)可以有多余的空格、连字符或下划线,这些都将在操作中被忽略(但只是词语之间的)。因此对“-gravity”下面这些参数都是有效的。
“NorthEast”、“northeast”、“NORTHEAST”、“NorTheAst”、“north east”、“north-EAST”、“NORTH_EAST”、“North East ”、“___North___East___”。但是“Nor The Ast”不是有效的参数,尽管所有的字母都是正确的,但空格放错了位置。这些常量名称不只用于设置,它们申明的操作方法,也将在一些更为复杂的图像处理中使用。如“-layers”、“-distort”和“-morphology”。许多常量名都从外部文件读取,例如,颜色名称如“-fill”、“-stroke”、“-background”和“-mattecolor”,或者用于“-ordered-dither”的特殊的“threshold”地图。此外,“-list”可用来查询当前安装的IM版本中所有的常量名。常量名列表这是一个较少使用的参数,通常用于如颜色调整等需要一种或者两种颜色的设置,“-level-colors”选项可以使用以下的任意参数样式。color
color1,color2
color1-color2当可以指定具体命名的通道时,另一个大量使用的选项是通道选择。例如:红、绿、蓝、黑和阿尔法。这个选项也采用以单个字母的字符串指定的列表,如RGBA。
几何参数这是最常见的形式或者选项参数,通常用来指定大小、矩形和各种操作的偏移量。它们还用于任何需要1至5的列表的选项,不论是整数还是浮点数。比如"-crop"和"-resize"选项将使用几何参数的完整句法,而"-border"、 "-level"和 "-gamma"等则只使用几何参数的小部分句法。这种类型的参数是如此普遍,但是又相当特殊和复杂,因为使用了内部解码器将参数解码为比输入的字符串更易使用的形式。这个参数允许用户指定一个至多包含5个浮点值的参数(尽管大多数操作符只能使用整数),以下所有的都是经过解码器解码的字符串形式:WxH+X+Y
A,B,C,D,E用户可以以上面的任何形式来指定这个小的数字列表,但是具体哪种形式被采用取决于操作中这个参数的用途。前面的几个通常用于规定特定的大小和位置,或者只是某种目的的偏移量。"+X+Y"的形式,则实际上被解码为第三个和第四个参数,而第一个和第二个参数则因未设置而为空。最后的几个形式中,最多可输入5个值,通常用来指定标准的RGBKA 的图像通道值。在这些数字中,解码器还会显示出是否有带有特殊标志的数字(%', '^', '!', '&', '&' 中的任意形式),但只是在字符出现的时候报告,但并不报告其在参数中的位置,例如,IM并不会记住'% 是在哪个特定的数字上,而只是显示它是存在的。而且如果多次出现,也不会重复报告。这就意味着'%50'的几何参数和'50%'的含义是相同的,尽管我们可能更倾向于后者的读法。同样的,'50%x30'可能实际上意味着'50%x30%',而不是你所认为的图像宽度的50%和30像素高。
几何参数可能包含特殊的“%”标志,目前无法基于图像属性设置运用百分号转义来设置其值。现在有关于百分号转义扩大来解决几何参数中的这个问题的未来建议,希望这将是IM版本7的一部分。
炫酷暗黑奇迹MU页游强悍来袭,秒怪秒BOSS,奇迹重生,来玩就送海量礼包!
浮点列表如果需要5个以上的浮点数,甚至是未知值的数,浮点列表参数将被使用。虽然目前这些都是由不同的选项分解完成,但是从选项到选项之间也会有细微的变化。它们通常由一个浮点数被逗号或者句号分开的字符串(通常为引用的)构成。Distort Operator是最著名的浮点数列表,其它还有 User Defined Morphology Kernels。浮点数的一个变形被"-sparse-color"使用,允许用户用颜色替代某些浮点值。当生成的数组传递到程序库时,在内部仍然被转换成浮点值。自由字符串无论是生成的标签,标注的文字,还是保存为图像元数据,许多选项只是将字符串作为一个参数。这些通常包括在字符串使用之前被替代的百分号转义,有可能是立即替代,也可能是稍后替代,但是一定是在参数使用之前。(见 Delayed Percent Escapes)有百分号转义的参数由于其性质,最后的两个参数类型往往都预先处理,以扩大字符串中的 Image Properity Percent Escape。这意味着特定的字符序列将扩大(字符串替换或取代)到其它字符串或者被处理图像正查询或者计算的值。这通常是在浮点列表被解码或者自由字符串被涉及到的选项运用之前进行。如果允许有百分号转义,意味着参数可以有一个'@'的前缀,即表示可以从给定的外部文件(或者标准输入)读取字符串或者数字列表。例如' '可以被'filename'文件名替代。如果发生这种情况,将不再做进一步的字符串处理。
注意:该文件可以是任何东西,包括可能被程序读取的系统文件和密码文件。作为这种特殊情况下的网站用户应该预先检查输入字符串,或者为保险起见,仍然将该字符串使用'@filename'子句上传到IM
如果该字符串不是从文件或者输入流中读取,所有的'\n'字符串都将被'newline'字符取代,任何的'%'的前缀标记都将被替换为适当的值。完整的替代列表见Image Properity Percent Escapes这意味着越来越多的操作如"-set","-sparse-color", "-distort", 和 "-morphology",都可以使用这样的前缀,用户可以基于各种图像属性和元数据来生成参数。除此之外,你还可以基于图像的内容或者索引来计算不同的参数集,甚至可以提前计算出单个图像或者全部图像的一些复杂设置。
在IM v6.6.9-0 的Percent Escapes和更具体的FX Percent Escapes被图像索引涵括之前,'%p', '%n', '%[fx:t]' 和 '%[fx:n]'等都已经被淘汰了,它们通常只会返回毫无用处的'0' 或者 '1',而不是图像在图像序列中的真实编号。
延迟处理的百分号转义在一些设置选项中,百分号转义并不是在命令行中出现的时候就立即扩大,而仅仅是被存储起来。只有当整个文本被使用过,用到百分号转义的图片被发现,字符串中所有的百分号转义才会被扩大,也就是说这些参数将推迟百分号转义的替代,直至该参数被使用。这些选项包括如"-label", "-comment","-format"和总体的"-define"值等输入设置。这也就意味着你可以远早于图像被读取应用指定包含图像特定的百分号转义的"-label"。只有当标签被连接到图像(在图像被读取之后),百分号转义才会扩大,因此可以使用将被应用的图像属性。
影响Percent Escapes更广泛使用的主要局限是目前还只被有限的选项参数使用,比如我们通常不会在 Geometry Arguments中使用,Geometry Arguments同样使用'percent'字符,但是是为了不同的目的。这个问题是IMv7将处理的主要问题之一。
ImageMagick命令尽管大多数网页中的例子都是用"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脚本的知识是有用的,但也不是严格要求。
identify——打印IM所见图像的详细信息"identify"命令以简单而有效的方式返回图像的信息。默认情况下,它输出简单的总结,详细说明图像名称、文件格式、图像大小、虚拟画布大小和偏移量、颜色深度、内部格式类型,和以人类的角度来看的磁盘中图像的原始大小。例如: identify
并不是说上面结果中的'8c'不是图像中颜色的数量(在版本6中就不是图像中颜色的数量),而是伪彩色调色板的大小(看之后颜色的实际数量的例子),还要注意图像虚拟画布的大小是实际图像的零偏移,也就意味着很少被使用。添加-verbose, Operational Control,会生成IM知道的或者容易计算出来的所有信息。包括颜色统计、颜色数、文件信息、图像保存类型等。IM只是用特殊的"-ping"选项来读取图像的基本信息,这导致识别只尝试读取图像文件的足够信息,而不是整个内存中的图像,来判断简单的图像如大小等信息。大多数的图像文件格式允许该操作,但也有一些不允许。这是"identify"和许多"convert"图像信息输出操作符相比最大的优势。(见 Ping, Operational Control)。例如: identify -ping tree.gif
通过"-format"设置和IM特殊的百分号转义生成 Image Properties,可以得到特定的图像信息和特定方式的输出。For example you can just extract a count of the number of colors within an image.例如你可以抽取图像中的一些颜色: identify -format '%k' tree.gif
你可以用FX Escape Expressions来进行一些浮点数计算: identify -ping -format 'double_width=%[fx:w*2] PI=%[fx:atan(1)*4]' tree.gif
这个计算甚至不需要和图像本身联系,你可以在脚本中将IM作为简单的浮点数计算器使用。
关于识别命令的更多介绍特定的格式细节:通常在输出使用了识别命令的结果之前,IM会利用各种图像程序APIs和其它辅助程序将图片读取到内存中(本质上是为了本身的内部数据格式)。识别命令会分析所读取或者存储的图像或数据内容,但是不会分析具体的图像格式是如何存储或者处理图像数据。这是非常重要的,因为可能有识别命令不会汇报的特定的图像格式的特定方面。例如它尽管列出了目前每个GIF图像的颜色表(许多图片都是可能的),它不会指出这个文件中的所有图像是否有相同的颜色表。如果你需要特定图像文件格式的特定信息,可能使用该图像格式的特定工具会更有效。例如针对GIF文件格式的"giftrans"命令和针对JPEG文件格式的"jpegtrans"命令。颜色直方图输出:如果图像中有多于1024种颜色,将没有直方图或者颜色表可以涵盖所有的颜色详细输出。如果一定要得到该信息,可以使用用特殊的'histogram:'文件格式,它包含图像的所有信息。退出状态:识别程序如果遇到损坏的图像将返回到一个非零的退出状态,并且将会出现Regard Warnings Control. error=`identify -regard-warnings image 2&&1 &/dev/`if [ $? -eq 0 ]; then
echo "The image is good"
echo "The image is corrupt or known format"
echo "$error"
识别命令的替代——文本输出选项在IM v6.2.4,你也可以使用特殊的"info:"输出文件格式,从"convert"命令中得到同样的输出结果。 convert ../images/k* \
-format 'image \"%f\" is of size %G'
info:你可以在操作序列的中间用Write Operator写入 "info:",作为调试工具。更好的方法是用"-identify"选项来写入正常标准输出。 convert ../images/k* \
-format 'Image #%p named \"%f\" is a %m' -identify \
也可以结合"-print"命令来输出其它的信息。 convert null: -print ' (50 + 25)/5
%[fx: (50+25)/5 ]\n' null: "-identify" 和 "-print"的主要区别在于第一个会应用到内存中所有的图像,但是后者则只运行一次。也就是说我们可以仅仅使用单个ImageMagick命令,就可以生成内存中所有图像的文本文件。如下,我们生成了再以前的例子中我们使用过的图像的HTML文件。 convert ../images/k* \
-print "&HTML&&BODY&&CENTER&\n" \
-print "&H1&
Display of %n Thumbnails
&/H1&\n" \
-print "\n" \
-format "&IMG SRC=\"%i\" ALT=\"%f\" WIDTH=%w HEIGHT=%h&" -identify \
-print "\n" \
-print "&BR&That's all folks!\n" \
-print "\n" \
-print "&/CENTER&&/BODY&&/HTML&\n" \
null:你可以看到以上的结果展示了将图像输出为HTML Web Page 。关于这些命令的最后一句话:在默认情况下,它们将显示"convert"命令下的标准输出。除非你重新定义了标准输出,你不能将特定输出转到其它管道或者特殊文件。利用"info:"来写入输出的要求,可以使你将输出特定到具体的文件,比如图像文件。你也可以将输出特定到预先设定的文件,或者使用特殊的"fd:"输出文件格式。当然,这个一次只能写入一个图像,因此需要一些技巧来安排一次输出。
Mogrify——批量处理"mogrify"命令在很多方面和"convert"命令很相似,除了它的目的是批量修改图像。"mogrify"命令的初衷是在将图像存储回和图像读取的文件名完全相同的文件之前,批量读取图像(或动画),然后批量修改。因为:Mogrify是非常危险的,因为它可能轻易的破坏原始图像。因此,在事情完结前,利用单独的图像的副本来测试"mogrify"。不要再没有备份的原始图像上使用。"mogrify"通常将修改后的图像保存到相同的文件名,但有两个特殊的选项,使之可以将图像保存到不同的文件。"mogrify"特定的设置"-format",定义了保存文件时不同的格式和后缀。例如: mogrify
-format jpg
可以用以上的命令来转换或者批量修改图像,而不损坏原始图像。在这个例子中,将所有的PNG文件转换为JPEG文件,用相同的文件名但是不同的后缀。但是值得注意的是现存的同名文件将被覆盖。因此让我们谨记:在使用Mogrify命令之前一定要慎重考虑和检查不然你会发现将你希望保存的东西覆盖掉了,在IM v6.2.0中,你同样可以使用新的"-path"选项为输出的已处理的图像指定不同的存储文件。这个更安全,但是仍然会覆盖在原有的文件中同名的图像。因此,你可以用如下命令创建一个缩略的子目录。 mkdir thumbnailsmogrify
-path thumbnails -thumbnail 100x100
在IM v6.3.4-3之前,"-format" 和"-path"设置是互斥的。如果你需要适用不同的目录或者不同的图像格式,则需要更新。
由于多图像处理功能,"mogrify"命令不能使用 Multi-Image Sequence Operators或者Image Stack/List Operators。这意味着在"mogrify"命令中,你不能使用诸如"-fx", "+swap", "-composite", "-append", "-flatten", 和"-layers"的图像处理操作符由于许多设置选项需要在第一个图像读取之前设定(如"-size", "-label" 和 "-density"),这些选项都在第一个图像读取之前处理和设定。在设定之后,每个图像被读取,在处理后的图像被存储和下一个图像被读取之前,操作符按照命令行中的顺序应用到图像。如果在之后调整了序列中设置,IM会忘记之前的设置。例如: mogrify -format gif
-size 200x200
-pointsize 18 \
-font Candice -gravity north
-annotate 0 "%f" \
-font Ravie
-gravity Center -annotate 0 "%f" \
-font Gecko
-gravity south
-annotate 0 "%f" \
-size 100x64
你可以看到上述生成的图像的大小取决于第二个"大小"输入设置,第一个较大的设置完全被忽略了。另一方面,"-font"设置是针对每个"-annotate"操作的。This added complexity means that it is probably a good idea to...这可能意味着这是一个好主意:简单地批量处理不要尝试使用长而复杂的转换,就像使用"mogrify"进行批量操作,可能会有设置问题。如果你实在想进行复杂地处理,那么写一个shell/dos/perl脚本来使用转换命令一次处理一个图像,或者使用ImageMagick API界面。使用脚本来修改多个图像的示例见Advanced ImageMagick Examples。记住,"mogrify"是一个非常危险的命令,在实际应用之前,应该在备份图像上测试。在对大量的图像进行处理之前,我建议在如"mogrify"命令等的脚本中包括一个快速测试,以确保该命令不会损坏任何图像(由于对版本更改或在计算机安装中的差异)。为保护用户免受不可预见的后果,对大批量图像处理项目而言是一个好主意。我在IM的例子中都会使用,这使我少了很多麻烦。
使用"mogrify"的阿尔法通道由于"mogrify"不能使用Multi-Image Sequence Operators,它不能轻易地覆盖标志或者是使用Alpha Composition的蒙版图像。但是有一个例外,即使用"-draw"来实现图像阿尔法通道的合并。在当前图像序列之外,指定第二个图像作为操作参数的一部分。例如,在这里我首先利用"cp_perl"脚本对希望处理的图像进行复制。然后创建一个临时的圆形的蒙版图像,然后我通常将所有的图像剪成圆形,之后用'Dst_In' 通道方法是用"mogrify"。 cp_perl
's/^/mogrify_/'
eye.gif news.gif storm.gif tree.gifconvert
-size 32x32 xc:none -draw 'circle 15.5,15.5 15.5,0'
circle.gifmogrify
-matte -draw 'image Dst_In 0,0 0,0 "circle.gif"'
mogrify_*.gif
注意任何阿尔法通道方法可以以这种方式使用,但是只能用恒定的'source' 或 'overlay'应用到所有的图片。由于"mogrify"将会读取源图像多次,我推荐你使用特殊的IM特定的"MPC:"文件格式来减少在一次又一次读取的过程中图像解码的次数。此图像文件格式不需要被IM解码,而是直接从磁盘映射到内存(和其创建时的机器相同)。这节省了大量的处理时间,尤其是在处理大数量图像的时候。使用Morgify替代转换使用 Percent Escapes这一特殊的技巧来修改输出文件名(见Filename Percent Escapes),你可以使用更通用的"convert"命令来替换"mogrify"。除此之外,它为你提供更多地控制最终的图像文件名。也可以让你更好地进行多图像如成分和动画的处理。如下,我创建了当前目录的图像的缩图,在输入文件名中插入了一个"_tn"字符串,并创建了合适的输出图片文件名。 convert *.jpg
-thumbnail 120x90 \
-set filename:fname '%t_tn' +adjoin '%[filename:fname].gif'
注意,不要在文件名设置时包含不同的文件后缀。当决定使用图像文件格式时,IM不会看见后缀。IM不能从文件名中判断时,它将回落到所读取图像的原始文件格式,所以在使用这个技巧时,一个明确的后缀或者一个编码器前缀非常重要。利用"%i","%d/%f"或 "%d/%t.%e"可以得到源图像所来自的确切的原始文件名。当然在文件名设置中,这些都有IM不会使用的文件名后缀,但是因为有相同的文件格式,在IM中也可以使用。使用"convert"替代"mogrify"的真正问题是所有的图像都先被读入内存!Mogrify只一次读取/修改/写入一个文件(尽管那个文件可能包含多个图像)。但是"convert"不是这样,因此如果不小心,很容易超出内存限制。但是有解决这个问题的方法。将Read Modifiers和 Thumbnails中的示例。因为所有的图像都是以单独的图像序列存储在内存中,对于如何处理这些图像需要十分小心。例如你不能直接像往常一样使用 Alpha Composition,但需要使用专门的Multi-Image Layers Composition。当然,因为原始图像文件可能很容易地被覆盖或者损坏,在"mogrify"这种方法中使用"convert"是非常危险的。
批量处理的另一种方法如果应用"mogrify"批量处理文件并不实用,尤其是复制而非修改图像时,这时也许一些非IM循环的解决方案可能会更好,这些包括: # Use a simple shell loop, to process each of the images.mkdir thumbnailsfor f in *.jpgdo
convert $f -thumbnail 200x90 thumbnails/$f.gifdone# Use find to substitute filenames into a 'convert' command.# This also provides the ability to recurse though directories by removing# the -prune option, as well as doing other file checks (like image type,# or the disk space used by an image).find * -prune -name '*.jpg' \
convert '{}' -thumbnail 200x90 thumbnails/'{}'.gif \;# Use xargs -- with a shell wrapper to put the argument into a variable# This can be combined with either "find" or "ls" to list filenames.ls *.jpg | xargs -n1 sh -c 'convert $0 -thumbnail 200x90 thumbnails/$0.gif'# An alternative method on linux (rather than plain unix)# This does not need a shell to handle the argument.ls *.jpg | xargs -r -I FILE
convert FILE -thumbnail 200x90 FILE_thumb.gif
等等。我建议使用"find"和"xargs"来进行循环甚至非循环文件的处理。关于此的介绍见IM Discussion Post和包含所涉及的危险信息的 Xargs - Wikipedia 指南。如果你的命令变得比这个还要复杂,则是时候使用shell脚本或者API程序来读取多个图像、收集信息、计算相关参数和处理图像。我也建议好好看看"parellel"命令(通常用来替换"xargs"),它不仅可以让你同时运行多个命令,还可以轻松地将每个命令在不同的计算机上运行,允许你在处理大数量图片的时候使用分散式处理。Windows用户,我推荐你看Windows Usage部分,特别是Windows, Batch Processing Several Files。
记住,"mogrify"和其它所有的IM命令会扩展所有包含如'*' 和 '?'等shell元字符的文件名。这样做是为了在老版本的DOS命令行shell中使用这些元字符,然而这可能会导致错误,重复或者一直运行mogrify。一些恶意来源的黑客提供这样的文件名,建议对安全问题谨慎和完全理解。
composite——以特殊的方式叠加图像"composite"命令是专门用来将两个图像以各种方式连在一起的简单的阿尔法通道合成(叠加)。这包括限制图像结合的区域,虽然使用了第三个蒙版图像。"composite"命令也提供了简单地访问一些更为复杂的阿尔法通道模式。例如"-dissolve", "-blend",和"-watermark"图像合成。如果给定了这些参数,将会覆盖命令中已经或者之后设定的"-compose"设置。注意"-tile"设置和其他的"convert" 、"montage"和 "display"的运行都是不一样的。"composite"会导致被叠加的图像平铺在整个背景图像上,这是其它的IM命令不具备的功能。这些特殊的特征使"composite"成为了一个非常有用的命令,但是现在在"convert"命令中也可以使用阿尔法通道了。(详见Alpha Composition in IM)将两个或者三个图像叠加的多种不同方式总结见 Layers of Multiple Images中的示例。关于两个图像合成方法的更多信息见Alpha Compositing中的例子。The overlay limiting or 'Masking' abilities is also detailed in the above examples page in Using a Compose Mask to Limit the Composed Area.叠加限制和'Masking'功能在Using a Compose Mask to Limit the Composed Area中的例子也有详述。
montage——生成缩略图阵列特殊的图像批量处理命令"montage"和"convert"一样遵循'do it as you see it'的命令行结构的风格。唯一不同的是,当命令结束的时候,"montage"将根据当前的设置,将图像序列处理为缩略图索引页。这使相较于IM版本5而言,"montage"有了更多的功能,你可以像使用"convert"一样对图像进行处理,然后设定"montage"的设置,之后就让它来完成所有的处理任务。更多关于"montage"的信息见Montage, Arrays of Thumbnails。display——图像幻灯片"display"程序是用幻灯片的形式来展示一个图像或者图像序列。这个命令不是像"animate"命令一样,对图像进行精心设计和制作计时动画。每个图像都将显示在和图像大小合适的窗口,除非有其它的选项(如window "-geometry",见下)覆盖这个行为。为了展示图像可能有的透明度效果,通常将图像显示在棋盘背景上。记住这个命令不是用来展示动画的,而是专门为了真实图像的幻灯片展示。因此在在用来显示脚本程序时,应该谨慎。图像显示时间,循环和其他选项在默认情况下,除了用户应用"-delay"设定的延迟,还有2秒钟的延迟。然而你可以使用“-delay 0”选项来使之等待用户输入(空格)。然而默认设置可能被图像本身的设置覆盖,这也取决于文件格式。因此如 GIF 和 MIFF的动画格式,会导致暂停或者图像元数据延迟设置的延迟时间加2秒的延迟。建议你总是根据脚本和需要来设置合适的延迟(记住"-delay 5x1"将延迟5+2即大约7秒)。"-loop"设置是相同的,默认情况下,"display"将永远循环("-loop 0"),但是 MIFF 和 GIF等图像格式可能会覆盖默认设置,将在最后一个图像之后退出循环。根据你的情况来设置适当的"-loop"选项。注意"display"不会对GIF Animation Settings进行任何处理,因此不会处理帧,虚拟画布大小和偏移量都将被忽略。换句话说,在 中,你将看到GIF原始部分图像,而不是完全叠加后的图像。"-coalesce"选项则正是清理动画来供显示的选项。透明度处理包含完整的阿尔法通道(EG PNG 和 MIFF格式)的图像将会被叠加到棋盘背景图像,让用户看到任何半透明如阴影的效果。可以通过以下的"-texture"命令选择不同的背景来改变上述情形。 display -texture granite: test.pngdisplay -texture xc:black test.png
有调色板(或布尔值)透明度的图像,如GIF和PNG8格式,显示了在颜色表中用来表示透明度的当前透明色。这通常使用的是随机颜色(通常黑色)而不是默认的棋盘模式。这可以被认为是一个错误,尽管在技术上看来不是。但是如果你想像处理其它含有透明度信息的图像一样处理这些图像,则可以在将图像显示之前,利用下面命令改变图像输出格式来删除调色板元数据。 convert image.gif -type truecolormatte miff:- | display -
另外,修改将显示的图像的任何操作也将删除已有的调色板元数据。因此,"display"选项可以用来删除调色板,如利用"-coalesce"的例子: display -coalesce image.gif
这可能会额外地清理GIF可能存在的动画。但是对多个不相关的图像,它可能会产生不良副作用。尽管这些方法看起来笨拙,但是确实可以运行。显示输出尺寸显示不会缩放图像以适应X窗口显示。窗口的大小将会调整来适应每个图像,除非使用了"-geometry"设置。该设置也可用于修复 X 窗口显示的窗口位置。即使图像比屏幕还大,图像大小也不会调整,而会溢出屏幕,显示命令会提供一个滚动窗口操作,使用户可以查看完整图像。在查看现代的高分辨率的数码照片时是非常痛苦的。为了将显示限制在800x600的像素区(只会调成更小,而不是更大),使用: display -resize 800x600\& photo.jpg
对于JPG图像,你可以使用特殊的输入尺寸提示设置来加快图像读取速度。见Reading JPEG Control Options。 display -define jpeg:size= -thumbnail 800x600\& photo.jpg
如果你想知道你的X窗口的显示尺寸可以使用"xdpyinfo",尽管这并不是IM所特有的。 xdpyinfo | grep dimensions:
注意,你应该使用比返回显示尺寸稍小的尺寸,以使窗口管理器可能在显示窗口进行窗口装饰。如果图片来源于现代数码相机,你可以利用图像文件格式中的EXIF元数据来使用"-auto-orient"命令更正所显示图像的方向。如果你不想要菜单,你可以使用"-immutable"设置"display"来关闭它,这样它就不会允许被编辑。显示的脚本使用考虑到所有这些因素,以下我推荐使用"display"来显示来自复杂shell脚本的结果。 display -delay 0 -loop 1 -coalesce -resize 800x600\&
some_random_image
另一种显示方法另一种显示(而非动画,见之后)的方法是使用更简单的"x:"输出图像格式(见 display output format)。 convert image.png x:
此方法不提供背景窗口、菜单选项和其他控件。它只是简单地一次显示一个图像。如果你只是简单地想显示处理后的图像,特殊的'show:' 和 'win:'输出Spawning Delegate 将和使用"display"命令对输出图像进行同样的处理及退出。 convert image.png show:
animate——显示图像的动画"animate" 和 "display"命令在很多方面都非常相似。但是"display"只是显示而非改变给定文件中的图像,在用户输入的每帧之间添加了至少2秒的暂停。而"animate"则将所存储的任何 GIF Animation Settings应用到图像,且只根据图像的'time delay'设置来显示每个图像,从头到尾循环地重复动画操作。换句话说"animate"命令可以生成动态的图像,而display则不可以。然而,正因如此,第一个图像的虚拟画布大小将控制输出图像的尺寸,另外的图像将覆盖到原来的图像区域。当然,因为图像是动态的,使用如"-delay"的选项来对显示时间进行良好的控制。这个命令还有一个参数"-pause",在最后一帧的"-delay"所设定的延迟之外,还会在动画循环的最后添加一个额外的暂停。例如,你可以使用"animate"来生成两个非常相似图像的Flicker Comparison ,如下: convert image1.png image2.png -scale 400% miff:- |\animate -delay 50 -loop 0 -
我写了一个利用这种叫做"flicker_cmp"的方法的脚本,发现其在辨别像素强度上的细微变化上非常有用。compare——找不同在IM示例的 Image Comparison Page部分有所有当前关于此命令的信息
stream——对大量图像进行流水线处理"stream"是用来在一个大的图像文件中提取一部分图像的专门程序。这是ImageMagick中唯一的这样的程序,别的程序在处理图像之前都是完全从内存中读取图像(JPEG图像使用"-size"选项时是个例外,因为它的支持库中包含了这个功能。你可以使用"-extract"设置来选取部分图像,用-depth设置来指定原始数据的颜色深度,还可以使用"-channel"选项来选择提取的颜色通道。但是"stream"只根据图像定义的颜色深度输出原始的颜色数据,因此你还需要使用convert命令来处理提取出来的输出信息。例如: stream -map rgb -storage-type char -extract 100x100+200+100 logo: - |\
convert -depth 8 -size 100x100 rgb:-
stream_wand.gif
import——读取屏幕上显示的图像"import"命令是一个可以用来从X窗口中抓取和提取图像特殊程序。例如可以抓取和打印一个从所有的显示中选择出来的窗口。 import -page A4 -gravity center ps:- | lpr
实际上"X:"这种特别的文件格式很少使用,它实现的功能和在convert命令中时完全一样。两者之间的唯一不同是"import"比"X:"格式有更多的X窗口特定设置,例如指定图像被抓取的显示、屏幕、和/或窗口ID。其它选项包括控制显示'beeping'和重复快照。如果没有指定具体的窗口,用户可以用鼠标来选取想抓取出来作为图像的部分。•如果使用鼠标点击,点击整个窗口将抓取和返回一个图像。注意如果显示屏上的其它窗口挡住了所选取窗口的一部分,则将会抓取到被其它窗口遮盖的图像。•点击根窗口或者选择"-window root"将会返回整个屏幕。•如果用鼠标点击并拖动,将返回整个屏幕的Cropped部分,也就意味着在显示器(虚拟画布、网页、尺寸)上的位置(虚拟画布便宜)也返回了。通过使用X窗口功能"xwininfo",你会发现别的选项可以通过抓取整个屏幕(“-window root”)、给定窗口标题或者X窗口ID,来避免人和鼠标之间的人机互动。你也可以使用"-extract"来减小选定窗口的面积。将特殊的输入格式"X:"视为使用"import"的替代方法:Note to import from the Windows clipboard useconvert clipboard:myimage image.pngand not "import"conjure——IM试用的脚本语言IM试用的脚本语言和多图像列表使用最初是为了Imagemagick使用,但是改进的IM版本6的"convert"命令见证了这个试用的API废用。它是一种基于XML的语言。但如果你想要XML,SVG的可能会更好地满足您的需求。在我看来,在处理多图像序列时,使用"conjure"脚本也许是更好和更简单。"conjure"正在被使用,但是由于缺乏示例和用户的支持,使用并不广泛。
图像序列或列表关于ImageMagick需要记住的重要观点,也是使新老用户都混淆的观点,即:ImageMagick针对的是整个有序的图像列表,而不是单个图像也就是说,IM不仅只处理单张图像,还能将一组图像中的每张单独处理,或者处理图像序列,甚至动态图像中的一系列图像帧。通常,所有的图像操作符可以应用到序列中的所有图像。因此,你可以使用"-draw"操作,它不会像许多新用户所设想的只处理序列中的最后一张图像,而是依次处理当前图像序列中的所有图像。如"-coalesce" 和 "-layers"的图像分层操作,将根据序列中的其它图像修改的新图像替换序列中的每个图像。它甚至可能添加或删除额外的图像!同样地,如"-append", "-mosaic"和"-fx"的图像列表操作,将用合并后的图像替换当前图像序列中的所有图像。这会损坏原来的所有图像,除非使用了Parenthesis 和 Cloned Images。见下面的Image Sequence Operators中的实例。最后,当读取或添加新的图像时,IM只会将这个新的图像添加到当前图像序列的末端。实际上,一些格式(比如GIF)可能会添加多个图像到当前图像序列,除非在输入文件名中添加了特殊的 Indexing Read Modifier来限制读入图像类型。在保存图像时,IM将保存在写入时内存中的整个图像序列。在图像格式允许的情况下,IM将所有图像写入一个文件。如果图像格式不允许多个图像(如JPEG),IM会将图像写入单独的文件(见 Writing a Multi-Image Sequence)Parenthesis——按希望的顺序来处理图像 随着命令行选项的形式化,处理的顺序是完全可预测的,并且在图像处理中添加圆括号(或方括号)也成为了可能。这是IM用户长期以来都期望的功能,也使用户得以完成在一个单一的命令中不可能完成的操作。开括号'('将启动一个所附带的操作都会运行的新的图像序列。闭括号')'则将处理后的图像序列(可能会不止一个图像,或者根本没有图像)添加到原来图像序列的末端。换句话说,使用parenthesis意味着:“我需要在处理后的结果添加到之前的序列之前,对单独的图像序列进行一些处理”它让你在添加处理后的结果到主图像序列之外,对一个图像子集进行处理,而不影响你之前已经读取或者处理的图像。让我们来看一些简单的例子: convert
cmd_negate.gif
正如你所见,"-negate"操作,取消了那时都在图像序列中的两个图像上的颜色。但是通过添加圆括号,我们可以限制只对第二个图像取消。 convert
eye.gif \(
-negate \) +append
cmd_bracket.gif
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 imagemagick java 的文章

 

随机推荐