Contents

使用ImageMagick处理图片

上一篇文章制作每日一句插件的过程中,使用了 ImageMagick 来自动生成打卡图片,其生成速度较快,而且命令行参数很多,作为一个开源的命令行图像处理工具,本篇博文来挖掘一下更多的用法,为了活学活用,插图均由 ImageMagick 来进行生成。

1.基本安装

以下为不同平台命令行安装方法,也可以去官网上下载对应的可执行文件。

1
yay install imagemagick

macOS 需要安装 Ghostscript fonts

1
2
brew install imagemagick
brew install ghostscript

Windows 两条命令二选一,需要安装对应的包管理器

1
2
3
scoop install imagemagick
# 或者
choco install imagemagick

2. 基本图片处理

2.1 查看图片信息

1
identify  old.png

得到如下结果:

old.png JPEG 690x690 690x690+0+0 8-bit sRGB 70632B 0.000u 0:00.000

2.2 比较两个图片之间差异

使用compare命令,具体可参考官方文档

1
compare rose.jpg reconstruct.jpg difference.png

2.3 格式转换

  • GIF:支持256种颜色
  • JPEG:转换成JPG会损失信息
  • PNG:保存所有颜色,不会损失信息

输出pdf

1
conert 01.jpg 02.png 1.pdf

pdf输出为图片(指定分辨率和质量,并进行切边)

1
convert  -density 150  -background white  -alpha remove  download.pdf  download.jpg

批量格式转换

1
mogrify -path newdir -format png  *.gif

将当前目录下的所有 gif 文件,转换为 png 格式,并将其存放在 newdir 目录下

2.4 改变图片大小

2.4.1缩放

1
convert -scale 50% old.gif new.png

特定大小,不考虑形变影响

1
convert image.png -resize 200x100! out.png

指定宽度

1
convert image.png -resize 200 out.png

指定高度

1
convert image.png -resize x100 out.png

批量缩放

1
mogrify -path newdir -resize 200% *.png

2.4.2 裁剪

自动裁剪

1
convert -trim cat.png cat.png

在指定位置裁剪,+repage 的作用是重置图像内部的信息

1
convert -crop 853x368+0+56 old.png +repage new.png

853和368是输出图片的宽度和高度,0和56是裁剪的起点
剔除不需要的部分(左右两边剔除 100 像素,上下两边剔除 50 像素)

1
convert image.png -shave 100x50 out.png

除非特殊情况,不然每次使用 -crop 类语句时,都应加上 +repage

2.5 色彩、亮度和饱和度

三个参数分别为亮度、饱和度和色调

1
convert -modulate 150,100,100 old.png new.png

2.6 旋转与翻转

顺时针旋转(角度负值代表逆时针)

1
convert image.jpg -rotate 90 image-rotated.jpg

左右翻转

1
convert image.png -flop out.png

上下翻转

1
convert image.png -flip out.png

自动倾斜矫正

1
convert page100.png -background white -deskew 40% deskewed.png

2.7 透明度、色彩与位深度

2.7.1 透明背景变成黑色

1
convert -flatten old.png new.png

2.7.2 转为灰度

1
convert -type Grayscale old.png new.png

2.7.3 降低图片的位深度

1
convert old.png -depth 8 new.png

2.7.4 减少图片色彩

1
convert old.png -dither -colors 256 new.png

2.8 图片合并

1
montage -mode concatenate -tile 1x cat1.jpg cat2.jpg out.jpg

纵向合并

1
convert x1.png x2.png x3.png -append out.png

横向合并

1
convert x1.png x2.png x3.png +append out.png

2.9 添加边框

1
convert -border 1 -bordercolor black old.png new.png

2.10 添加文字

1
convert -fill red -draw 'text 20 20 "© 2006 example.com"' old.png new.png

3. 图片滤镜

3.1 锐化与虚化

锐化

1
convert -sharpen 2 old.png new.png

虚化

1
convert -blur 1 old.png new.png

3.2 其他效果

3.2.1 加噪声

1
convert -noise 3 old.png new.png

3.2.2 油画效果

1
convert -paint 4 old.png new.png

3.2.3 铅笔画效果

1
convert -charcoal 2 old.png new.png

3.2.4 散射效果

1
convert -spread 30 old.png new.png

3.2.5 漩涡效果

1
convert -swirl 67 old.png new.png

4. 色彩处理

4.1 反色处理

类似底片效果

1
convert -negate old.png new.png

4.2 黑白颜色

-threshold 的作用是在颜色世界划一条线,线上的为白,线下的为黑。

1
convert -monochrome old.png new.png

4.3 使用level变换颜色

1
2
convert old.png -level 25%,75% new.png
convert old.png -level 25% new.png

-level 命令后面如果跟两个参数(用逗号分开),第1个参数 25% 表示将原图颜色中最暗的 25% 变为黑,第二参数 75% 则表示将最亮的 25% 为白。剩下的依线性变换。
当省略第二个参数时,两者取同样的值,因此上面两条命令实际上是一致的。

-level 后面还可以跟第三个参数,用第3个参数来调整 gamma 值,直线变成了曲线。

4.4 sigmoidal 非线性对比度变换

1
convert old.png  -sigmoidal-contrast 10,50% new.png

4.5 增加对比度

1
2
convert gray_range.jpg  -normalize  normalize_gray.jpg
convert gray_range.jpg  -contrast-stretch 15%  stretch_gray.jpg

5.生成画布

5.1 单色画布

1
2
convert -size 100x100 xc:blue canvas_blue.png
convert -size 100x100 xc:rgb(0,0,255) canvas_blue.png

5.2 渐变画布

1
2
3
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

5.3 内置纹理

1
convert -size 640x480 pattern:checkerboard checkerboard.png

参考

  1. Examples of ImageMagick Usage (Version 6) https://imagemagick.org/Usage/
  2. mageMagick Tutorial http://xahlee.info/img/imagemagic.html
  3. ImageMagicK 常用命令 https://www.hahack.com/wiki/tools-imagemagick.html
  4. imagemagick对于图像处理的一些方式 https://blog.csdn.net/mo3408/article/details/80671398
  5. ImageMagick:批量处理图像的超级利器 https://bbs.gxsd.com.cn/forum.php?mod=viewthread&tid=253184
  6. ImageMagick v6 Examples – Color Modifications http://www.imagemagick.org/Usage/color_mods/
  7. 图像处理 - ImageMagick 简单介绍与案例 https://aotu.io/notes/2018/06/06/ImageMagick_intro/index.html