北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

使用ImageMagick自动化图片处理(image-making)

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 blackfill white:分别设置文字颜色为黑色和白色。

-text 0,12text 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:让缩略图移除图片内嵌的所有配置文件,注释等信息,以减小文件大小。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言