Skip to content

Latest commit

 

History

History
526 lines (350 loc) · 10.3 KB

ImageMagick学习笔记.md

File metadata and controls

526 lines (350 loc) · 10.3 KB
欢迎共同研究ImageMagick
Email:sxw2k@sina.com
sxw
                                                        2011年暑假

ImageMagick学习笔记


注意:ImageMagick对中文支持不好,文件(夹)一定不要含中文,否则会报错!切记!

-开启开关 +关闭开关,恢复从前。

convert

convert顾名思义就是对图像进行转化,它主要用来对图像进行格式的转化,同时还可以做缩放、剪切、模糊、反转等操作。 格式转化

比如把 foo.jpg 转化为 foo.png:转换不会破坏原图像。

convert foo.jpg foo.png

Mogrify

mogrify -format png *.jpg

将所有jpg文件转换成png格式,不破坏源文件(相当于批量转换了)

注意:

mogrify -format png *.gif

会把gif文件的每一帧都转化成png文件,会生成很多文件

convert还可以把多张照片转化成pdf格式:

convert *.jpg foo.pdf
convert test.gif test.jpg 会生成很多以test开头的图片文件

=>大小缩放

为一个普通大小的图片做一个缩略图

convert -resize 100x100 foo.jpg thumbnail.jpg

也可以用百分比,更为直观:

convert -resize 50%x50% foo.jpg thumbnail.jpg  (50%x50%是字母x)

convert会自动地考虑在缩放图像大小时图像的高宽的比例,也就是说新的图像的高宽比与原图相同。

批量生成缩略图:

mogrify -sample 80x60 *.jpg

注意,这个命令会覆盖原来的图片,不过你可以在操作前,先把你的图片备份一下。

convert -sample 25%x25% input.jpg output.jpg

等比列缩放 =>加边框

在一张照片的四周加上边框,可以用 -mattecolor 参数,

convert -mattecolor "#000000" -frame 60x60 yourname.jpg rememberyou.png

其中,"#000000"是边框的颜色,边框的大小为60x60

=>在图片上加文字

convert -fill green -pointsize 40 -draw "text 10,50 charry.org" 2.jpg 222.jpg

上面的命令在距离图片的左上角10x50的位置,用绿色的字写下charry.org,如果你要指定别的字体,可以用-font参数。

或者:

convert 1.png -fill white -pointsize 13 -draw "text 10,15 ‘lifesinger 2006’" 2.png

=>模糊

高斯模糊:

convert -blur 80 foo.jpg blur.png

-blur参数还可以这样-blur 80x5。后面的那个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

油画效果 我们可用这个功能,把一张普通的图片,变成一张油画,效果非常的逼真

convert -paint 4 foo.png bar.png

着色:

着色是将每个像素的颜色与指定颜色混合的过程。该效果的参数就是要用来混合的颜色。可以用一个百分数(它将分别用于红色、绿色和蓝色),也可以用三个百分数来指定这个参数。也可以提供三个实际值中的一个。要指定三个值,每个值分别代表红色、绿色和蓝色三个采样,使用 red/green/blue 形式的参数。例如, 10/20/30 意味着红色的值是 10、绿色值为 20 而蓝色值为 30。您也可以在这个构造中使用百分数

convert -colorize 255 input.jpg output.jpg
convert -colorize 100/0/125 input.jpg output.jpg

内爆效果

内爆效果模拟了您图像的中心被吸入虚拟黑洞的情形。所用的参数是您所期望的内爆效果量。

convert -implode 1 input.jpg output.jpg

曝光,模拟胶片曝光

convert -solarize 42 input.jpg output.jpg

扩散

spread 在图像之内以随机的数量移动像素。所用的参数是被移到新选择的位置的像素区域的大小。所以它指定了输出和输入的相似程度

convert -spread 5 input.jpg output.jpg

马赛克效果:convert -sample 10% -sample 1000% input.jpg output.jpg

从左至右将图片水平相连:

convert +append *.jpg result.jpg

convert -size 350x500 xc:black composite.jpg
composite -geometry +0+0 composite.jpg image1.gif composite.jpg
composite -geometry +100+0 composite.jpg image2.gif composite.jpg
composite -geometry +0+300 composite.jpg image3.gif composite.jpg
composite -geometry +0+375 composite.jpg image4.gif composite.jpg

旋转 把一张图片,旋转一定的角度:

convert -rotate 30 foo.png bar.png

上面的30,表示向右旋转30度,如果要向左旋转,度数就是负数。

炭笔效果:

convert -charcoal 2 foo.png bar.png

形成炭笔或者说是铅笔画的效果。增加 -charcoal 选项的参数的数值会增加应用于该图像的“炭笔”数量,但也会延缓生成图像的过程。

散射 毛玻璃效果:

convert -spread 30 foo.png bar.png

漩涡 以图片的中心作为参照,把图片扭转,形成漩涡的效果:

convert -swirl 67 foo.png bar.png

凸起效果 用-raise来创建凸边:

convert -raise 5x5 foo.png bar.png

执行后,你会看到,照片的四周会一个5x5的边,如果你要一个凹下去的边,把-raise改为+raise就可以了。其实凸边和凹边看起来区别并不是很大。 为图片添加一些注释信息:

convert -font Arial -stroke green -fill red -draw "text 50,60 www.hist.edu.cn" -pointsize 14 07.jpg hist.png

解释:

-draw “text 10,10  String"  在以图片左上角为原点坐标的10,10位置处添加文字
-font 指定字体
-stroke 描边用的颜色,
-fill 填充用的颜色,这里用none就可以画出空心字了,
-pointsize 字体像素大小,
-font Arial 将注释的字体设置为Arial。也可以在此处指定字体文件的路径。但它是使用位于非标准位置的字体来完成该任务的:
convert -font c:\windows\fonts\1900805.ttf -fill white -pointsize 36 -draw ‘text 10,475 “ylmf.com”’ floriade.jpg stillhq.jpg
-fill white 用白色而不是标准的黑色来填充字母。
-pointsize 36 以点为单位指定字母的大小。一英寸等于 72 点。
convert -font fonts\1900805.ttf -fill white -pointsize 36 -draw 'text 10,475 "stillhq.com"' floriade.jpg stillhq.jpg

以下是结果:

带标记的图像

-fill white 用白色而不是标准的黑色来填充字母。

发散后应用炭笔效果:

convert -sample 50%x50% -spread 4 -charcoal 4 input.jpg output.jpg

加上5个像素宽的红色边框:

convert -bordercolor red -border 5x5 input.jpg output.jpg
convert -list color 列出描边可用的颜色

还可以使用以下方法来指定您自己的颜色了,这里 R 表示红色值,G 表示绿色值,B 表示蓝色值,A 是 alpha(透明度)值:

#RGB - (R,G,B 是十六进制数,每个 4 位) 
#RRGGBB - (每个 8 位) 
#RRRGGGBBB - (每个 12 位) 
#RRRRGGGGBBBB - (每个 16 位) 
#RGBA - (每个 4 位) 
#RRGGBBAA - (每个 8 位) 
#RRRGGGBBBAAA - (每个 12 位) 
#RRRRGGGGBBBBAAAA - (每个 16 位) 
rgb(r,g,b) - (r,g,b 是十进制数) 
rgba(r,g,b,a) - (r,g,b,a 是十进制数) 
convert -mattecolor rgba(255,91,191,1) -frame 2x2 input.jpg out.jpg

添加一些类似于用 -raise 命令得到的阴影

convert -mattecolor rgb(255,181,197) -frame 5x5+2 input.jpg out.jpg

更多的修饰:

convert -mattecolor rgb(255,181,197) -frame 5x5+2+2    input.jpg out.jpg
convert -mattecolor rgb(255,181,197) -frame 25x25+0+25 input.jpg out.jpg
convert -mattecolor rgb(255,181,197) -frame 25x25+25+0 input.jpg out.jpg

研究边框可深入研究下-frame参数

composite 命令将一个图像叠加到另一个图像上

composite -gravity NorthEast w.jpg input.jpg out.jpg
composite -gravity NorthWest w.jpg input.jpg Northwest.jpg
composite -gravity SouthWest w.jpg input.jpg southwest.jpg
composite -gravity SouthEast w.jpg input.jpg southEast.jpg

可以叠加一个透明的角,生成带有圆角的图像。

将图片转换成pdf文件

convert *.jpg  test.pdf

convert test.pdf test.png 是将pdf中的文件导出!但是需要 Ghostscript

生成法国国旗图案

convert -size 20x40 xc:red xc:white xc:blue +append flag.png

命令的执行是有顺序的,按照从左至右的顺序依次执行

convert 1.jpg -crop 300x300+0+0 -resize 200x200 -colors 100 +profile "*" 1.png

表示:把1.jpg先从左上角(0,0)裁剪一块300x300的部分,然后把这部分缩小到200x200,然后把颜色缩减到100色,最后生成1.png。"+profile "*""意味着在图片文件里不存储附加信息,以减小图片体积。

注意,-resize会试图保留原图的视觉比例,因此不一定生成的图片和你指定的尺寸一定匹配,比如,如果2.jpg大小是400x200,那么如果用下面的命令:

convert 2.jpg -resize 100x100 2.png

那么生成的图片2.png的实际大小是100x50。

常用的命令有:

-crop 宽x高+起点横坐标+起点纵坐标:裁剪图
-resize 宽x高[!]:改变尺寸,如果使用惊叹号,表示不保留视觉比例,强行改变尺寸匹配给定的宽和高
-colors 颜色数:设定图片采用的颜色数,如果是生成png或gif图片应指定这个参数
-quality 质量:设定jpeg图片输出质量,推荐采用80,此命令仅用于输出格式是jpg的情况,不应省略,省略的话默认质量是95,生成图片过大
+profile "*":图片中不存储附加信息,必须使用,否则生成图片过大

生成索引:

montage -bordercolor red -borderwidth 3 -label "%f" -tile 5x3 *.jpg montage.jpg
mogrify -format gif *.jpg

将所有jpg文件转换成gif格式

identify -verbose 001.jpg

显示图片详细信息

identify -format "%wx%h"  001.jpg

显示图片的宽和高输出类似于640x480,其中-format允许你仅仅定想要输出的信息。%w 表示图像宽度,而 %h 表示图像高度

图片目录(visual image directory ,VID)的创建:

montage *.jpg directory.vid

或则

convert 'vid:*.jpg' directory.vid

如何将gif文件分析为一系列的单个图片?

convert animation.gif framed.gif

如何从图片文件中抽取第一张图片

convert "Image.gif[0]" first.gif 

如何创建一张空白图片

convert -size 80x60 xc:"#ddddff" ss.jpg
convert -size 80x60 null:white white.jpg
convert 017.jpg -threshold 100% black.jpg  创建一张与017.jpg同大小的图片,黑色
convert 017.jpg -threshold 65% black.jpg
identify -format "%wx%h" sample.png

显示图片宽和高

convert +adjoin *.jpg frames%d.gif  所有jpg图片转换成gif格式

如何生成gif动画

1、convert -delay 20 *.jpg animation.gif
2、convert -delay 20 001.jpg -delay 10 006.jpg -delay 5 007.jpg animation.gif
3、convert 010.jpg -page +50+100 007.jpg -page +0+100 008.jpg animation.gif
4、convert -loop 50 *.jpg animation.gif

Imagick的两种命令行格式:

command  [options]  input_image   output_image
command  [options] image1 [options] image2 [options]  output_image
convert -size 40x20 xc:red  xc:blue  -append  -rotate 90  append_rotate.gif

产生一蓝一红2个图片,附加到一块然后再右旋转90度

convert -size 40x20 xc:red  xc:blue -rotate 90  -append   append_rotate.gif
convert -size 40x20 xc:red  xc:blue  -append   append_rotate.gif
convert -size 40x20 xc:red  xc:blue -rotate 90  append_rotate.gif

注意这是一个动画,有2副图片。会动的!!

convert 06.jpg 07.jpg -append 08.jpg 09.jpg -background skyblue +append temp.jpg

06.jpg和07.jpg垂直附加,08.jpg和09.jpg水平附加在背景为天蓝色的图片上

convert -list gravity
  • None
  • Center
  • East
  • Forget
  • NorthEast
  • North
  • NorthWest
  • SouthEast
identify -ping 000.jpg

# 000.jpg JPEG 670x448 670x448+0+0 DirectClass 8-bit 46.2891kb


identify -format "%k" 000.jpg
# 34426

identify -ping -format "double_width=%[fx:w*2] PI=%[fx:atan(1)*4]" 000.jpg
# double_width=1340 PI=3.14159

convert null: -print "(50 + 25)/5  ==>  %[fx: (50+25)/5 ]\n" null:
# (50 + 25)/5  ==>  15