ImageMagick 是一款免费开源的命令行图像处理工具包。它支持 Linux, Windows, Mac OS X, iOS, Android OS 等平台,支持数百种图像格式(包括常见的 JPEG, PNG, GIF, TIFF 等),并提供了丰富的图像处理功能,如图像转换、缩放、裁剪、滤镜、颜色调整、动画制作等。ImageMagick 不仅可以单个处理图像,还可以批量处理,极大地提高了工作效率。
获取图片信息
#显示简略图片信息
identify /path/to/image.png
#显示详细图片信息
identify -verbose /path/to/index.jpg
返回信息如下:
index.jpg JPEG 1280x853 1280x853+0+0 8-bit sRGB 279261B 0.000u 0:00.000
返回值含义:
- index.jpg:文件名。
- JPEG:图像格式(WEBP)。
- 1280x853:图像的维度,宽度为800像素,高度为400像素。
- 1280x853+0+0:图像维度和偏移量。其中1280x853 表示图像的宽度和高度;+0+0 表示图像的偏移量(起始点位置),在这里表示没有偏移(从左上角开始)。
- 8-bit:每个颜色通道的位深度(这里是8位)。
- sRGB:图像的颜色空间(标准RGB颜色空间)。
- 279261B:图像文件的大小(字节),这里是279261字节(约279KB)。
- 0.000u:用户CPU时间(以秒为单位),即处理图像所花费的CPU时间。
- 0:00.000:真实时间(以分钟和秒为单位),即处理图像所花费的实际时间
缩放图像
#缩放到指定大小
convert /path/to/source.png -resize 200x200 /path/to/target.png
#按百分比缩放 convert /path/to/source.png -resize 50% /path/to/target.png
#多次缩放(本例是缩小再放大,效果就是变模糊了,可用于做马赛克)
convert /path/to/source.png -resize 50% -resize 200% /path/to/target.png
#只缩放宽,高按比例(省略高不写即可,但“x”号还是要写的)
convert /path/to/source.png -resize 200x /path/to/target.png
#只缩放高,宽按比例(省略宽不写即可,但“x”号还是要写的)
convert /path/to/source.png -resize x200 /path/to/target.png
#批量把iPhone拍的照片缩小成指定尺寸
declare -i j=0;for i in *.JPG; do convert $i -resize 1008x ${i:0:$[${#i}-4]}_resized.jpg;j=j+1;echo $j"."$i" convert succeed"!; done
裁剪图像
#从(50,50)坐标开始,裁剪一个100100大小的图片(乘号用小写英文字母xyz的x就可以)
convert image.png -crop 100x100+50+50 crop.png
#不指定位置,则会把大图片分割成100100的小图片,生成crop-0.png, crop-1.png, ……
convert image.png -crop 100x100 crop.png
镜像图片
# 水平翻转,就是我们平时说的镜像
convert input.jpg -flop output.jpg
# 垂直翻转,这个一般比较少用
convert input.jpg -flip output.jpg
旋转图片
convert input.jpg -rotate 90 output.jpg
-rotate 参数旋转图片。将图片顺时针旋转90度并保存为 output.jpg,逆时针旋转45度:-45。
添加水印
1、添加图片水印
convert input.jpg -gravity SouthEast -composite watermark.png output.jpg # 在右下角添加水印
-gravity:指定水印的位置为东南角,即图片的右下角。
-composite:表示将水印图片与输入图片进行合成。
2、添加文字水印
convert ./index.png -pointsize 72 -draw "text 50,100 'Hello world'" output.jpg
-pointsize 50:设置水印文字的大小为50点。
-draw:后面跟着的是绘图命令,用于在图片上绘制文字。
"text 50,100 'Hello world'":text 后面的坐标 50,100 定义了文字在图像上的位置,即距离图像左边缘50像素,距离上边缘100像素。
进阶命令1:双色阴影水印
magick index.png \
-font Arial -pointsize 50 -gravity south \
-draw "fill black text 0,12 '(c) HY2009' fill white text 1,11 '(c) HY2009'" \
output1.jpg
命令含义:
index.png:要处理的图片文件名。
-font Arial:设置水印文字的字体为Arial。
-pointsize 50:设置水印文字的大小为50点。
-draw:后面跟着的是绘图命令,用于在图片上绘制文字。
-gravity south:设置文字的重力方向为南,即文字会位于图片的底部。
-fill black 和 fill white:分别设置文字颜色为黑色和白色。
-text 0,12 和 text 1,11:设置文字的位置,第一个数字是x坐标,第二个数字是y坐标。这里的坐标可能是相对于图片左上角的偏移量。
(c) HY2009:要添加的水印文字内容。
进阶命令2:使用中文
magick index.png \
-font "SimHei" \
-gravity SouthEast \
-pointsize 68 \
-fill black \
-annotate +300+200 "疆北行者靖水印测试" \
image_watermarked.jpg
使用黑体-font "SimHei"字体,可以支持中文。
\:续行字符,当一个命令很长时,我们可以把它写成多行。
进阶命令3:平铺水印
magick -size 100x100 xc:none \
-fill #d90fff \
-pointsize 35 -font SimHei \
-gravity center -draw "rotate -45 text 0,0 '行者靖'" \
-resize 80% miff:- \
| composite -tile -dissolve 25 - index.png watermark.jpg
代码含义:
-size 100x100 xc:none: 这部分命令创建了一个新的100x100像素的图像,背景为透明(xc:none)。文本平铺水印其实是将文本画成一张 png 图片,然后用这张透明图片在目标图片上进行平铺。
-fill #d90fff: 设置填充颜色为#d90fff,这是一个十六进制的颜色代码。
-pointsize 18 -font cochin.ttc: 设置字体大小点为18,并指定使用cochin.ttc字体文件。
-gravity center -draw "rotate -45 text 0,0 '行者靖'": 将文本'行者靖'放置在图像中心,并旋转-45度。
-resize 80% miff:-: 将图像缩小到原尺寸的80%,miff:-表示输出到标准输出)。
| composite -tile -dissolve 25 - index.png watermark.jpg: 使用composite命令将处理后的图像作为水印平铺到index.jpg图像上,溶解度为25%,最终生成watermark.jpg。
将文本"HY2009"旋转并转换为水印,然后将其平铺到index.jpg图像上,生成带有水印的图片watermark.jpg。
调整图像大小
mogrify -resize 50% input.jpg
等比缩小 50%,直接修改 input.jpg。mogrify: 用于直接修改原始图像。请谨慎使用,建议先备份原始图像。
convert input.jpg -resize 800x600 output.jpg
-resize 参数可以改变图片大小。例如,调整尺寸为 800x600。
调整图像颜色
提供了丰富的颜色调整选项,如亮度、对比度、饱和度、色相等。
convert input.jpg -brightness-contrast 20x10 -modulate 100,120,100 output.jpg
-brightness-contrast 20x10 调整图像的亮度和对比度。20x10中的20表示亮度调整的强度,10表示对比度调整的强度。亮度调整会增加或减少图像的亮度级别,而对比度调整会增强或减弱图像中不同颜色之间的差异。
-modulate 100,120,100 调制图像的饱和度、亮度和对比度。这里的100,120,100分别对应饱和度、亮度和对比度的调制值。100表示不改变饱和度,120表示增加亮度,100表示不改变对比度。
创建 GIF 动画
convert -delay 20 -loop 0 image1.png image2.png image3.png animation.gif
-delay 指定帧之间的延迟时间(单位为 1/100 秒),
-loop 0 表示无限循环。
压缩图片
将图片质量降为原来的10%(即压缩掉了90%),取值范围1 ( 最低的图像质量和最高压缩率) 到100 ( 最高的图像质量和最低压缩率),默认值根据输出格式有75、92、100,选项适用于JPEG / MIFF / PNG。
magick convert -quality 80 1.jpg 2.jpg
生成缩略图
convert -resize 150x100 -quality 70 -strip goods.jpg thumbnail.jpg
-resize 150x100:定义输出的缩略图尺寸为 150x100。
-quality 70:降低缩略图的质量为 70,取值范围 1 ( 最低图像质量和最高压缩率 ) 到 100 ( 最高图像质量和最低压缩率 ),默认值根据输出格式有 75、92、100,选项适用于 JPEG / MIFF / PNG。
-strip:让缩略图移除图片内嵌的所有配置文件,注释等信息,以减小文件大小。