mageMagick 几个简单的应用。
1、批量图像格式转换
如果想将某目录下的所有jpg文件转换为png文件,只要在命令行模式下输入:
for %f in (*.jpg) do convert "%f" "%~nf.png"
2、对所有图像进行同一操作
譬如,批量生成某目录下所有PNG图像文件的缩略图(大小为80×40):
for %f in (*.png) do convert "%f" -sample 80×40 "%~nf_sample.png"
类似的,将某目录下所有PNG图像旋转90度的操作为:
for %f in (*.png) do convert "%f" -rotate 90 "%~nf_rotate.png"
还可以进行批量裁剪、淡化、抖动、炭化、加边框、圆角等等一系列操作,具体可参考:
http://www.ibm.com/developerworks/cn/linux/l-graf/index.html
http://linux.chinaunix.net/docs/2006-12-15/3481.shtml
3、在图像上加上文字说明
如果你有大量图片需要发布,在所有图片上加上版权说明是很明智的做法。用ImgeMagick可以很容易的实现:
convert 1.png -fill white -pointsize 13 -draw "text 10,15 ‘lifesinger 2006'" 2.png
可以用-font指定字体,这时需要安装Ghostscript支持: http://www.cs.wisc.edu/~ghost/
还可以用composite命令在所有图片上加上水印,有兴趣的看这里:
http://www.imagemagick.org/script/composite.php
-----------------------------------------------------------------------------------------------------------------------------
convert
转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
identify
描述一个或较多图像文件的格式和特性。
mogrify
按规定尺寸制作一个图像,模糊,裁剪,抖动等。Mogrify改写最初的图像文件然后写到一个不同的图像文件。
composite
根据一个图片或多个图片组合生成图片。
montage
创建一些分开的要素图像。在含有要素图像任意的装饰图片,如边框、结构、图片名称等。
compare
在算术上和视觉上评估不同的图片及其它的改造图片。
display
如果你拥有一个X server的系统,它可以按次序的显示图片
animate
利用X server显示动画图片
import
在X server或任何可见的窗口上输出图片文件。 你可以捕获单一窗口,整个的荧屏或任何荧屏的矩形部分。
conjure
解释执行 MSL (Magick Scripting Language) 写的脚本。
convert -sample 100x20 input.jpg output.jpg
上述命令生成一个100x20的缩略图
更好的方法是用等比例缩放,像这样,统一生成1/4的缩略图
convert -sample 25%x25% input.jpg output.jpg
如果写成脚本,就是像这个样子
for img in `ls *.jpg`
do
convert -sample 25%x25% ${img} thm${img}
done
加注图片
convert -font fonts/font.ttf -stroke color -fill color -pointsize size
-draw 'text 10,10 "String"' input.jpg output.jpg
-font 指定字体,因为这样我加注文字,
-stroke 描边用的颜色,
-fill 填充用的颜色,这里用none就可以画出空心字了,
-pointsize 加注字体大小,像素数,
-draw 是用来画,这里是文字,下面的位置10,10 是以图片左上角为原点坐标的
向图像添加文本注释
有时您需要向图像添加文本注释。例如,假设您的公司拥有标准的名片图像,并希望在将名片发送到打印机之前将每个雇员的详细信息都添加到名片上面。另一个示例是为通过您网站上的在线课程的用户生成表示证书(presentation certificate)。
您可以使用下列命令行,为该图注释一些标识信息:
convert -font helvetica -fill white -pointsize 36
-draw ‘text 10,50 “Floriade 2002, Canberra, Australia”’
floriade.jpg comment.jpg
迄今为止,这是我在本文中所展示的最复杂的 convert 命令行了,因此我将花些时间来解释它。
-font helvetica 将注释的字体设置为 Helvetica。也可以在此处指定字体文件的路径。这个示例给图像添加了标记,这样未经许可其它网站就不能再使用该图像了,但它是使用位于非标准位置的字体来完成该任务的:
convert -font fonts/1900805.ttf -fill white -pointsize 36
-draw ‘text 10,475 “stillhq.com”’
floriade.jpg stillhq.jpg
-fill white 用白色而不是标准的黑色来填充字母。
-pointsize 36 以点为单位指定字母的大小。一英寸等于 72 点。
-draw ‘text 10,50 “...”’ 是一组绘图命令,在本例中是移动到位置 10, 50,然后绘制出双引号中的文本。使用单引号是因为如果需要绘制多个字,则绘图命令中需要使用双引号,而您不能在双引号中再用双引号。
在一次 ImageMagick 调用中执行多条命令
您已经看到了将命令与注释示例联系起来的示例。但是,可以将本文中提到的任意 ImageMagick 命令链接起来。例如,也许我们希望制作某图像的缩略图,然后对它应用发散。在发散发生之后,我们将应用炭笔效果:
convert -sample 25%x25% -spread 4
-charcoal 4 input.jpg output.jpg
用convert给图片加边框
convert -raise 5×5 input.jpg output.jpg
convert +raise 5×5 input.jpg output.jpg
以上命令分别用-,+边缘颜色的来达到处理边缘的效果!
convert -bordercolor red -border 5×5 input.jpg output.jpg
简单的加上5个像素宽的红边!
convert
convert顾名思义就是对图像进行转化,它主要用来对图像进行格式的转化,同时还可以做缩放、剪切、模糊、反转等操作。
格式转化
比如把 foo.jpg 转化为 foo.png:
convert foo.jpg foo.png
如果要想把目录下所有的jpg文件都转化为gif,我们可借助于shell的强大功能:
find ./ -name "*.jpg" -exec convert {} {}.gif \;
转化后的gif名称为 *.jpg.gif ,这样看起来不太自然,没关系,我们可以再来一步:
rename .jpg.gif .gif *.jpg.gif
本来,我想在find的时候,用basename来取得不带后缀的文件名的,这样就不会形成.jpg.gif这种丑陋的名子了,可是不知道为什么,就是不行,如果你知道的话,告诉我
或者,你也可用shell script来完成上述的操作:
for i in *.jpg
do
convert $i `basename $i .jpg`.gif
done
我们还可用mogrify来完成同样的效果:
mogrify -format png *.jpg
上面命令将会把目录下面所有的jpg文件转化为png格式。
convert还可以把多张照片转化成pdf格式:
convert *.jpg foo.pdf
大小缩放
比如我们要为一个普通大小的图片做一个缩略图,我们可以这样
convert -resize 100x100 foo.jpg thumbnail.jpg
你也可以用百分比,这样显的更为直观:
convert -resize 50%x50% foo.jpg thumbnail.jpg
convert会自动地考虑在缩放图像大小时图像的高宽的比例,也就是说着新的图像的高宽比与原图相同。
我们还可以批量生成缩略图:
mogrify -sample 80x60 *.jpg
注意,这个命令会覆盖原来的图片,不过你可以在操作前,先把你的图片备份一下。
加边框
在一张照片的四周加上边框,可以用 -mattecolor 参数,比如某位同志牺牲了,我们需要为他做一张黑边框的遗像,可以这样:
convert -mattecolor "#000000" -frame 60x60 yourname.jpg rememberyou.png
其中,"#000000"是边框的颜色,边框的大小为60x60
你也可以这样加边框:
convert -border 60x60 -bordercolor "#000000" yourname.jpg rememberyou.png
在图片上加文字
convert -fill green -pointsize 40 -draw 'text 10,50 "charry.org"' foo.png bar.png
上面的命令在距离图片的左上角10x50的位置,用绿色的字写下charry.org,如果你要指定别的字体,可以用-font参数。
模糊
高斯模糊:
convert -blur 80 foo.jpg foo.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
旋转
把一张图片,旋转一定的角度:
convert -rotate 30 foo.png bar.png
上面的30,表示向右旋转30度,如果要向左旋转,度数就是负数。
炭笔效果
convert -charcoal 2 foo.png bar.png
形成炭笔或者说是铅笔画的效果。
散射
毛玻璃效果:
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就可以了。其实凸边和凹边看起来区别并不是很大。
其他
其他功能都是不太常用的,如果你感兴趣的话,可以看它的联机文档
import
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应该是我们使用的最为频繁的图像处理软件了,毕竟,还是看的多
显示图片
display foo.png
如果你要显示多个文件,你可以使用通配符
display *.png
幻灯片
display -delay 5 *
每隔5个百分之秒显示一张图片
一些快捷键
space(空格): 显示下一张图片
backspace(回删键):显示上一张图片
h: 水平翻转
v: 垂直翻转
/:顺时针旋转90度
\:逆时针旋转90度
>: 放大
<: 缩小
F7:模糊图片
Alt+s:把图片中间的像素旋转
Ctrl+s:图象另存
Ctrl+d:删除图片
q: 退出
图片在网站所占的比重越来越重。更好的优化图片可以提高网站速度。减少宽带流量。
ImageMagick 是一个用来创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。支持大多数的操作系统。
1.对用户上传图片进行缩放
对于用户自己上传的图片不能简单的 用css限制大小,因为这样每次加载图片时候还是会加载整幅大图。占用多余的宽带,并且影响页面加载速度。应该根据实际显示需要进行缩放。比如我想要用户 相册里的图片大小不能超过500x300:
用ImageMagick处理起来很简单
convert -resize "500x300>" input.jpg output.jpg #如果图片比500x300小就保持原样,以防小图片被放大失真。
2.生成不同比例缩略图
一般相册等应用,都会提供缩略图和预览图,这些缩略图同样不能简单的用css来限制大小,要为每个图片生成不同比例的预览图。
3.去除多余信息
Exif信息是数码相机在拍摄过程中采集的一系列信息,这些信息放置在我们熟知的jpg文件的头部,也就是说Exif信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过Exif信息所记录的资讯更为详尽和完备。不过,具有Exif信息的 JPEG图像文件要比普通的JPEG文件略大一点。还有就是像PS这种软件处理过的图片会有“program comments”。如果不是专业的摄影类网站,这些信息是没有用的,可以去掉:
convert -strip input.jpg output.jpg
4.调节压缩比
大多时候,我们的网站并不需要那么清晰的图片,适量调节JPG图片的压缩比会减少图片大小,肉眼并不会分辨出质量被压缩后的图片。通常75%是最佳比例。
convert -quality 75% input.jpg output.jpg
上面几个步骤可以一次搞定:
convert -resize "500x300" -strip -quality 75% input.jpg output.jpg
上面说的都是针对JPG格式的处理方式,下面说一下BMP,GIF,PNG等格式的处理。
对于BMP直接转成JPG就可以了。再按照上面的方式处理。
而GIF和PNG貌似有些特殊。GIF的一些特性(动画效果,透明等)是 JPG没有的,可以根据实际情况选择转或不转,如果转换成jpg,取第一帧只需要这样:
convert -format jpg input.gif input.jpg
PNG也可以通过减少PNG图片color数量的办法达到压缩的目的。但是这种办法压缩出来的图像可以明显看出来失真,而且呈锯齿状。
对于真实世界的PNG图片(通常指照片),一般先转换成JPG,再通过上面的办法来压缩。
但是要注意一点,透明或半透明的PNG图片在转换成JPG时透明部分会变成黑色。。。建议做用户头像时候不要转成JPG。。很难看~~~
本人头像就是深受毒害。。
关于图片扩展名
发现大部分网站喜欢把用户上传的图片(头像,相册等)都统一转成特定格式(一般都是 jpg)。这样做的潜在弊端就是在用像ImageMagick这样的软件处理的时候会根据扩展名做隐式格式转换。
个人觉得在保存图片的时候不加扩展名处理起来更灵活一些。
注:把上面的命令行用mini_magick改写用到rails里很容易的。mini_magick本质就调用系统命令行嘛~~
links:
本文所说的都是对用户上传的图片处理,对网站自身的图片(header,banner等)处理《Even Faster Websites》一书第十章里面写的很详细了:
http://www.graphics.com/modules. ... ticle&artid=756
更多ImageMagick用法:
http://www.imagemagick.org/script/index.php
imagemagick的命令convert的使用方法:
convert命令的使用方法
imagemagick的命令convert的使用方法:
改变图片/照片大小
------------------------------------------------
convert img_0476.jpg -resize 45% zeng.jpg
注:
img_0476.jpg ---> zeng.jpg
2076387(2.0MB) ---> 467319(467KB)
JPG与JPEG没有区别(但百度空间不支持JPEG格式)
批处理改变图片/照片大小
------------------------------------------------
#/bin/bash
for img in `ls *.[Jj][Pp][Gg]`
do
img_size=`du $img | cut -f1`
if (($img_size >= 2800))
then
convert $img -resize 38% boo-$img
elif (($img_size >= 2500))
then
convert $img -resize 40% boo-$img
elif (($img_size >= 2000))
then
convert $img -resize 42% boo-$img
elif (($img_size >= 1800))
then
convert $img -resize 45% boo-$img
elif (($img_size >= 1500))
then
convert $img -resize 52% boo-$img
elif (($img_size >= 1000))
then
convert $img -resize 55% boo-$img
elif (($img_size > 500))
then
convert $img -resize 75% boo-$img
fi
done
旋转图片/照片
------------------------------------------------
convert -rotate 90 1.jpg 1.jpg (或)
convert -rotate +90 1.jpg 1.jpg
顺时针旋转图片
加边框
------------------------------------------------
convert -bordercolor red -border 5x5 1.jpg 1.jpg
加一个5x5的红色边框
convert -list color
转自:http://blog.sina.com.cn/s/blog_6ff6523d0100rf8s.html
linux下图片处理工具ImageMagick使用方法
convert命令格式: -resize widthxheight{%} {@} {!} {<} {>} {^}
1. 默认时,宽度和高度表示要最终需要转换图像的最大尺寸,同时Convert会控制图片的宽和高,保证图片按比例进行缩放。
如:convert -resize 600×600 src.jpg dst.jpg
转换后的dst.jpg的图片大小(宽度为600,而高度已经按比例调整为450).
2.如果需要转换成600×600,而图片无需保持原有比例,可以在宽高后面加上一个感叹号!.
如:convert -resize 600×600! src.jpg dst.jpg
3. 只指定高度,图片会转换成指定的高度值,而宽度会按原始图片比例进行转换。
如:convert -resize 400 src.jpg dst.jpg
转换后的dst.jpg的图片大小(宽度为400,而高度已经按比例调整为300),和例1有点类似。
4. 默认都是使用像素作为单位,也可以使用百分比来形象图片的缩放。
如:convert -resize 50%x100%! src.jpg dst.jpg 或者convert -resize 50%x100% src.jpg dst.jpg
此参数只会按你的比例计算后缩放,不保持原有比例。(结果尺寸为100×150)
5.使用 @ 来制定图片的像素个数。
如:convert -resize “10000@” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(115×86),图片保持原有比例(115×86= 9080 < 10000)。
6.当原始文件大于指定的宽高时,才进行图片放大缩小,可使用>命令后缀。
如:convert -resize “100×50>” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(67×50),图片保持原有比例。
如:convert -resize “100×50>!” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(100×50),图片不保持原有比例。
7.当原始文件小于指定的宽高时,才进行图片放大转换,可使用<命令后缀。
如:convert -resize “100×500<” src.jpg dst.jpg 或者convert -resize “100×100<!” src.jpg dst.jpg
此命令执行后,dst.jpg和src.jpg大小相同,因为原始图片宽比100大。
如:convert -resize “600×600<” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(600×450),图片保持原有比例。
如:convert -resize “600×600<!” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(600×600),图片不保持原有比例。
8.使用^命令后缀可以使用宽高中较小的那个值作为尺寸
如:convert -resize “300×300^” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(400×300),图片保持原有比例,(300:300 < 200:150,选择高作为最小尺寸)。
如:convert -resize “300×200^” src.jpg dst.jpg
此命令执行后,dst.jpg图片大小为(300×225),图片保持原有比例,(300:200 > 200:150,选择宽作为最小尺寸)。
转自:http://www.cnblogs.com/liangge02 ... /06/23/2088322.html
ImageMagick 的一些简单使用
先来介绍一下 ImageMagick:
ImageMagick(简称 IM)是一个支持 GPL 协议的开源免费软件包。
它由一组命令行工具组成的。
它可以对超过 100 种的图像格式(包括 DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, 和 TIFF等等),进行读、写、编辑和转换的操作。
它支持多数主流操作系统,其中包括 UNIX、Mac OS X 和 Windows。
IM 的主页是 http://www.imagemagick.org/ 转自 http://www.coffeeba.net/?p=210
先来看看 ImageMagick 能做些什么:
1、批量旋转、分割,并顺序编号:
2、自动批量切除白边(auto-crop):
3、自动倾斜校正(deskew):
4、批量加标注:
5、批量去标注:
6、批量加水印:
7、批量去水印:
一、最基本的格式转换
下面,我将结合与扫书制书有关的图像操作,来说明 IM 的用法。
前面已经说过,IM 由一组命令行工具组成,具体来说也就是 convert、mogrify、composite、montage、identify、compare、display、animate、 stream、import 和 conjure,这 11 个命令。
其中最常用的,是 convert 和 mogrify。
1、将 a.gif 转为 png 格式
# convert a.gif a.png
请注意,convert 命令的基本格式为
# convert 源文件 [参数] 目标文件
在上面的命令中,源文件是 a.gif,目标文件是 a.png。由于这是最简单的格式转换,所以不需要中间的参数。
convert 常用于单个文件的转换。上面的命令是它最基本的用法。
前面说过 IM 支持超过 100 种的文件格式。
下面的命令,可以列出 IM 所支持的所有格式
# identify -list format
2、批量文件的格式转换
# mogrify -path newdir -format png *.gif
这个命令的作用,是将当前目录下的所有 gif 文件,转换为 png 格式,并将其存放在 newdir 目录下。
mogrify 是用于批量处理文件的命令。它的基本格式是这样的:
# mogrify 参数 源文件
mogrify 支持基本的通配符,例如你可以用 a*.png 指代所有以 a 打头的 png 文件,诸如此类。
再回到刚才的命令:
# mogrify -path newdir -format png *.gif
这里的 -path 和 -format 是两个可选择的参数。
-format 指定输出的文件格式,而 -path 则指定输出的文件目录。
我在这里先强调一下:如果不加 -path 参数的话,mogrify 有可能会覆盖你的源文件,因此强烈推荐在每个 mogrify 命令里都加上 -path 参数,并在执行之前,先检查整个命令正确性。
二、图像的缩放:使用 -resize
IM 有好几种缩放图像的方法,在这里我只讲最基本的 resize 命令。
将一个200×304大小的图像缩小为100×152(长宽各缩短一半)。
# convert page200.png -resize 100x152 page100.png
上面的 100×152,指定了目标文件的长和宽。
你也可以只指定目标文件宽度,这样它的高度会等比例放大:
# convert page200.png -resize 100 page100.png
或者只指定高度:
# convert page200.png -resize x152 page100.png
以上三句命令,其结果都是一样的。
你可以用 identify 命令来显示图像的尺寸以及其它一些信息:
# identify page100.png
其结果为:
page100.png PNG 100×152 100×152+0+0 8-bit DirectClass 17.9kb
最后,你还可以通过指定百分比来缩放图像:
# convert page200.png -resize 50% page100.png# convert page200.png -resize 150% page300.png
批量缩放图像
# mogrify -path newdir -resize 200% *.png
这句命令的意思是将当前目录中所有的 png 文件都放大一倍,并存放到 newdir 目录中。
请注意,如果没有 -path 语句,新生成的 png 文件将会覆盖原始文件。因此,在使用 mogrify 命令时,-path 参数几乎是必须的。
另外,我们也可以注意到 mogrify 和 convert 的命令其实基本上是通用的。通常我们可以先用 convert 修改单个文件,对结果满意的话再用 mogrify 进行批量处理。
三、图像的剪切
使用 -crop
# convert page100.png -crop 50x50+10+10 crop1.png# convert page100.png -crop 50x50+10+10 +repage crop2.png
如图所示,这两句命令的意思都是以 10,10 为原点,从图上剪一个 50×50 的小图。
+repage 的作用是重置图像内部的信息。下面是用 identify 命令查看 crop1.png 和 crop2.png 的结果。
crop1.png PNG 50×50 100×152+10+10 8-bit DirectClass 4.6kb
crop2.png PNG 50×50 50×50+0+0 8-bit DirectClass 4.56kb
除非特殊情况,不然每次使用 -crop 类语句时,都应加上 +repage。
-gravity 语句
在缺省情况下,原点坐标设在图像的左上角,也就是所谓的 NorthWest。你可以用 -gravity 语句来改变坐标的方向。
例如:
# convert page100.png -gravity west -crop 50x50+0+0 +repage crop3.png# convert page100.png -gravity east -crop 50x50+0+0 +repage crop4.png
-gravity 的参数包括 NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast。大小写都行。
下面的命令在扫描图书时经常会用到
# convert 2pages.png -crop 50%x100% +repage newpage.png
系统自动会生成 newpage-0.png 和 newpage-2.png 两个文件。
请注意,在 -crop 后面跟的是 50%x100%,而不是 50%x100%+0+0。
这句话的意思,是让它按 50%x100% 这样的大小,一块块切下去,能切几块就切几块。
如果你设的是 50%x50%,那它就会切成 4 块。
批量处理:
# convert page*.png -crop 50%x100% +repage newpage%03d.png
请注意这里的 %03d。这条命令能自动产生 newpage001.png newpage002.png newpage003.png ……这样的文件。页码顺序不乱。
-trim 自动切除白边
# convert page100.png -trim +repage trim.png
这也是在书本处理中常常要用到的功能。
四、旋转与校正
-rotate
# convert r90.png -rotate -90 page200.png
rotate 命令很简单,看图就懂了。
这在扫图时也很常用。
批量旋转:
# mogrify -path newdir -rotate -90 *.png
结合以前讲的 -rotate 命令,旋转分割一步到位。
# convert r2pages.png -rotate -90 -crop 50%x100% +repage newpage.png
-background 命令
# convert page200.png -background blue -rotate 10 r10.png
用 -background 设定背景的颜色,有时会用得到。
# convert -list color
这个命令列出所有可直接使用的颜色英文名。
IM 支持许多种表示颜色的方法(其它的以后再讲),直接用英文名(如 black, white, red, blue 等)是最方便的。
-deskew
# convert page100.png -background white -deskew 40% deskewed.png
-deskew 命令用于自动倾斜校正。后面跟一个百分数,手册上推荐你用 40% 这个值(A threshold of 40% works for most images)。
批量校正:
# mogrify -path newdir -background white -deskew 40% *.png
五、颜色处理(一)
IM 中有许多调整颜色的方法,让我们先从最无聊的讲起。
# convert page.png -noop noop.png
-noop ,表示什么也不做!
放在这里,当然不只是为了凑字数,而是为了让大家熟悉一下中间的那个坐标图。
上面的这个坐标,表示变换前后的两者的颜色值完全一样。不做改变。因此形成了一条45度的对角线。
# convert page.png -negate negated.png
-negate 反相。黑变成了白,白变成了黑。
形成 -45 度的直线。
另外请注意中间坐标系下面的两条渐变线。
# convert page.png -level 25%,75% p1585.png
convert page.png -level 25% p15.png
-level 命令后面如果跟两个参数(用逗号分开),第1个参数 25% 表示将原图颜色中最暗的 25% 变为黑,第二参数 75% 则表示将最亮的 25% 为白。剩下的依线性变换。
当省略第二个参数时,两者取同样的值,因此上面两条命令实际上是一致的。
# convert page.png -level 0,85% p0-85.png
你也可以用 +level。
# convert page.png +level 25% p+25.png
另外,-level 后面还可以跟第三个参数:
# convert page.png -level 0,100%,2.0 p0-100-2.0.png# convert page.png -level 0,100%,0.5 p0-100-2.0.png# convert page.png -level 0,85%,0.5 p0-100-2.0.png
用第3个参数来调整 gamma 值。直线变成了曲线。
六、颜色处理(二)
下面的这条命令,充分显示了 ImageMagick 有多变态。
# convert logo.png -fx "(1/(1+exp(10*(.5-u)))-0.0066928509)*1.0092503" sigmoidal.png
输完了吗?
祝贺你,你刚完成了一次著名的 sigmoidal 非线性对比度变换。
是的,ImageMagick 就是这么变态,你可以输入完整的公式,对原始图像进行随心所欲的变换。
顺便说一下,sigmoidal 变换是很有用的工具,它对扫描后的文件有很好的效果。
但是,谁又记得住这么长的公式呢?
别担心,ImageMagick 已经替你想到了。
# convert logo.png -sigmoidal-contrast 10,50% logo_sigmoidal.png
这句命令,和前面那一长串公式达到的效果是一样的,而且好像更快。
ImageMagick 里还有不少命令,可以帮你节约时间。
例如下面的:
# convert gray_range.jpg -normalize normalize_gray.jpg
-normalize 的作用是把原图中最暗的部分变成黑,最亮的部分变成白,由此来增强对比度。
# convert gray_range.jpg -contrast-stretch 15% stretch_gray.jpg
-contrast-stretch 的作用和 -normalize 是一样的,只是多了个可调节的参数。
七、颜色处理(三)
我们在制作图书的时候常常遇到瘦身的问题,ImageMagick 有什么好办法吗?
# convert logo.png -colors 64 logo64c.png
这条命令把颜色数降为 64。你看得出两者的区别吗?反正我是看不出。
现在用 identify 看一下两者的区别:
# identify *.png
logo.png PNG 202×152 202×152+0+0 8-bit DirectClass 17.4kb
logo64c.png[1] PNG 202×152 202×152+0+0 8-bit PseudoClass 64c 4.84kb
一个是 17.4k,一个是 4.84k。
瘦身成功!
类似的命令还有 -monochrome:
# convert logo.png -monochrome monochrome.gif
把图片变成黑白两色。
-threshold
# convert logo.png -threshold -1 threshold_0.gif# convert logo.png -threshold 25% threshold_25.gif# convert logo.png -threshold 50% threshold_50.gif# convert logo.png -threshold 75% threshold_75.gif# convert logo.png -threshold 100% threshold_100.gif
-threshold 的作用是在颜色世界划一条线,线上的为白,线下的为黑。
八、在图上写字
下面讲一下如何在如何运用字体。
先来看看有哪些字体可用:
# convert -list font > fonts.txt
这条命令会在当前目录下生成 fonts.txt 文件,里面是所有可用的字体列表。
然后是 label 指令。
# convert -background lightblue -fill blue -font Candice -pointsize 72 label:Anthony label.gif
label 命令生成一行字。请注意,它前面没有“-”号。如果你要输入一行字就用双引号把它括上。像这样:label:”Hello World!”。
-background 和 -fill 分别设定背景和文字的颜色。
-font 和 -pointsize 设定字体和大小。
但是这条命令不直接支持中文,你必须先把你要写的字存到文本文件里才行:
# convert -background lightblue -fill blue -font 方正书宋_GBK -pointsize 72 label:@gxsd-utf8.txt gxsd.gif
冒号后面的 @ 后面跟的是文件(gxsd-utf8.txt)而不是字符串。
请注意:这个文件必须是不带 Unicode 标志位的 utf-8 文件。
下面介绍 caption:
# convert -background lightblue -fill blue -font Corsiva -pointsize 36 -size 320x caption:"This is a very long caption line." caption.gif
caption 的用法和 label 差不多,区别就在于它可以折行。
上面的几种方法都是如何生成单独的图片,如果要在现有图片上印字怎么办呢?
那就用 -annotate:
# convert page200b.png -font 楷体 -fill white -undercolor #00000080 -gravity South -annotate 0x0+0+10 @anno-utf8.txt anno.png
-annotate 的格式是这样的:
-annotate{SlewX}x{SlewY}+{X}+{Y}"字符串"
其中 +X+Y是所在的相对位置。(请复习第三章中 -gravity 的用法)。
而 {SlewX}x{SlewY} 则表示倾斜的角度。
关于 ImageMagick 的字体运用就先讲这些。
九、绘图
开始之前,先介绍如何用 ImageMagic 生成画布:
# convert -size 100x100 xc:blue canvas_blue.gif# convert -size 100x100 xc:rgb(0,0,255) canvas_blue.gif
xc: 生成一块单色的画布,颜色由冒号后面的 blue 或 rgb(0,0,255) 指定,尺寸由 -size 指定。
# convert -size 50x50 xc:red xc:blue +append red+blue.gif# convert -size 50x50 xc:red xc:blue -append red-blue.gif
用 append 合并图像,请注意 + 和 – 的区别。
接下来是 gradient,渐变:
# convert -size 100x100 gradient: gradient.jpg# convert -size 100x100 gradient:blue gradient_blue.jpg# convert -size 100x100 gradient:red-blue gradient_red_to_blue.jpg
-draw 是最基本的绘图指令。
# convert -size 100x60 xc:skyblue -fill white -stroke black -draw "rectangle 20,10 80,50" draw_rect.gif
这条命令是在一块 100×60 大小的天蓝色画布上,画一个白底黑边的长方形,起点为 (20,10),终点为 (80,50)。
通过加不同的参数,-draw 命令不但可以画长方形,它还画点、直线、圆弧、折线等等。具体的用法和上面的长方形类似,请参考http://www.imagemagick.org/script/command-line-options.php?#draw。
# convert -size 100x60 xc:skyblue -fill white -stroke black -draw "ellipse 50,30 40,20 0,360" draw_ellipse.gif# convert -size 100x60 xc:skyblue -fill white -stroke black -draw "polyline 40,10 20,50 90,10 70,40" draw_polyline.gif# convert -size 100x60 xc:skyblue -fill white -stroke black -draw "roundrectangle 20,10 80,50 20,15" draw_rrect.gif# convert -size 100x60 xc:skyblue -fill white -stroke black -draw "ellipse 50,30 40,20 45,270" draw_ellipse_partial.gif# convert -size 100x60 xc:skyblue -gravity center -draw "image over 0,0 0,0 'terminal.gif'" draw_image.gif# convert -size 100x60 xc:skyblue -fill white -stroke black -font Candice -pointsize 40 -gravity center -draw "text 0,0 'Hello'" draw_text.gif