convert 图片转换的一次示例

ImageMagick 是 Linux 下的一个常用的图片处理工具,核心命令是 convert, identify 等。

type convert identify
# identify is /usr/bin/identify
# convert is /usr/bin/convert
ll /usr/bin/convert /usr/bin/identify
# lrwxrwxrwx 1 root root 25 2018-09-27 14:23:05 /usr/bin/convert -> /etc/alternatives/convert
# lrwxrwxrwx 1 root root 26 2018-09-27 14:23:05 /usr/bin/identify -> /etc/alternatives/identify
ll /etc/alternatives/convert /etc/alternatives/identify
# lrwxrwxrwx 1 root root 24 2018-09-27 14:22:52 /etc/alternatives/convert -> /usr/bin/convert-im6.q16
# lrwxrwxrwx 1 root root 25 2018-09-27 14:22:52 /etc/alternatives/identify -> /usr/bin/identify-im6.q16

apt-file search /usr/bin/convert-im6.q16
apt show imagemagick
apt-file list imagemagick-6.q16 | grep /bin/
# imagemagick-6.q16: /usr/bin/animate-im6.q16
# imagemagick-6.q16: /usr/bin/compare-im6.q16
# imagemagick-6.q16: /usr/bin/composite-im6.q16
# imagemagick-6.q16: /usr/bin/conjure-im6.q16
# imagemagick-6.q16: /usr/bin/convert-im6.q16
# imagemagick-6.q16: /usr/bin/display-im6.q16
# imagemagick-6.q16: /usr/bin/identify-im6.q16
# imagemagick-6.q16: /usr/bin/import-im6.q16
# imagemagick-6.q16: /usr/bin/mogrify-im6.q16
# imagemagick-6.q16: /usr/bin/montage-im6.q16
# imagemagick-6.q16: /usr/bin/stream-im6.q16

原图

素材:20190505-convert-sample1.jpg

!sample1.jpg

素材:20190505-convert-sample2.jpg

!sample2.jpg

素材:20190505-convert-sample3.jpg
!sample3.jpg

素材:20190505-convert-sample4.jpg

!sample4.jpg

素材:20190505-convert-sample5.png

!sample5.png

过程

横向拼接

convert +append sample1.jpg sample1.jpg sample1.jpg sample1.jpg markjour-up.jpg

查看图片信息

identify markjour-up.jpg
# markjour-up.jpg JPEG 4500x865 4500x865+0+0 8-bit sRGB 360459B 0.000u 0:00.000
identify sample5.png
# sample5.png PNG 1224x592 1224x592+0+0 8-bit sRGB 1.59874MiB 0.000u 0:00.000

转换宽度

convert -resize 600x markjour-up.jpg markjour-up.jpg
convert -resize 600x sample5.png markjour-down.jpg

identify markjour-*.jpg
# markjour-down.jpg JPEG 600x290 600x290+0+0 8-bit sRGB 74026B 0.000u 0:00.000
# markjour-up.jpg JPEG 600x115 600x115+0+0 8-bit sRGB 19941B 0.000u 0:00.000

纵向拼接

convert -append -quality 70 markjour-up.jpg markjour-down.jpg markjour-full.jpg

最终效果

其他

我常用的 convert 参数

  • -resize 缩放
  • -sample 50% 和 resize 功能类似,不过只采样,不插值(表现就是放大时,resize 会模糊,sample 则马赛克)
  • +/-append 拼接
  • -quality 70 图片质量
  • -crop WxH+X+Y 裁剪
  • -transparent white 将某种颜色设为透明,在有些情况下,真香
  • -flatten -background '#eee' 将透明色去掉,替换成指定底色

没有用过的 convert 参数

  • delay 可以生成 GIF

webp

ImageMagick 不支持 webp

sudo apt install -y webp
  • cwebp
  • dwebp

这两个命令也用得多,一方面网页上下下来的图片很多都是 webp 格式了,再一方面,自己也常用 webp 格式图片在网页上。

具体用法就看 manpage,比较简单。