ImageMagick的基本使用

ImageMagick的基本使用

简介与安装

ImageMagick简介

ImageMagick是一个开源的强大的图片处理库,可用来创建、编辑、合成或转换位图图像,比如:调整大小,翻转,镜像,旋转,扭曲,剪切和变换图像,调整图像颜色,应用各种特殊效果,或绘制文本,线,多边形,椭圆和贝塞尔曲线等等。

本文只列出我使用过的命令,并不是完整的教程,随着我平时使用的增加,文章会不断更新,命令会不断增加,当然如果我平时用的少,那可能就只会有这些了。

安装ImageMagick

由于我是macOS,所以使用macOS最常用的包管理器brew来安装

brew install imagemagick

命令使用格式

安装后,它主程序就一个magick,但它会有很多符号链接链接到magick,如下图所示
-w499

既然都是符号链接,从理论上来说,我用identify和用magick应该是一模一样的才对,但实际上却是这样的(如图所示)
image.jpg

我猜是因为它把命令本身也当成一个参数,当它识别到是identify时,它就会做输出图片简略信息的操作。事实上,identify是magick的子命令,所以我们还可以这样写
image.jpg

所以,所有的符号链接其实都是magick的子命令,通用的使用方法是

magick 子命令 参数

但magick却巧妙的给magick创建多个符号链接,并把符号链接名称命名为它的子命令名,这样在使用上就好像是多了一个可执行文件,其实内部还是通过识别符号链接的名称来自动识别到它是子命令,以达到简化命令的目的,让我们可以直接以下边这种方式调用

子命令 参数

常用命令

获取图片信息

#显示简略图片信息
identify /path/to/image.png

#显示详细图片信息
identify -verbose /path/to/image.png

缩放图片

使用resize缩放

#缩放到指定大小
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

使用sample采样缩放(只采样不插值,一般用于做缩略图)

#原图的50%
convert image.png -sample 50% sample.png

#先缩小再放大,就是马赛克效果
convert image.png -sample 10% -sample 1000% sample.png

裁剪图片

#从(50,50)坐标开始,裁剪一个100⨉100大小的图片(乘号用小写英文字母xyz的x就可以)
convert image.png -crop 100x100+50+50 crop.png

#不指定位置,则会把大图片分割成100⨉100的小图片,生成crop-0.png, crop-1.png, ……
convert image.png -crop 100x100 crop.png

把当前文件夹下的所有.jpg格式的图片都从(597,4)坐标开始(矩形左上角顶点),截取大小为1312×1076的图片,并且把图片名称的后27个字符(包括.jpg4个字符)去掉(后面再自己拼上)

declare -i j=0;for i in *.jpg; do convert $i -crop 1400x1076+597+4 ${i:0:$[${#i}-27]}.jpg;j=j+1;echo $j"."$i" convert succeed"!; done

${i:m:n}表示从字符串i的第m位截取到第n位,在我这里i就是图片文件名(包括.jpg后缀),m是0,n是$[${#i}-27]${#i}是文件名i的总长度。


把当前文件夹下的所有.jpg格式的图片都从(0,453)坐标开始(矩形左上角顶点),截取大小为540×744的图片

declare -i j=0;for i in *.jpg; do convert $i -crop 540x744+0+453 ${i:0:$[${#i}-27]}.jpg;j=j+1;echo $j"."$i" convert succeed"!; done

把当前文件夹下的所有.PNG格式的图片都从(414,4)坐标开始(矩形左上角顶点),截取大小为1312×1076的图片,同时把格式格式转为jpg

declare -i j=0;for i in *.PNG; do convert $i -crop 1530x1242+414+4 ${i:0:$[${#i}-4]}.jpg;j=j+1;echo $j"."$i" convert succeed"!; done

$[${#i}-4]表示文件名总长度减4(其实就是去掉.PNG这个后缀,然后再自己拼上.jpg)。

修改位深

convert source.jpg -depth 8 target.png

同时缩放和修改位深(用于压缩png图片)

convert /path/to/source.png -resize 1080x1920 -depth 8 /path/to/target.png

格式转换

直接在输出文件中用不同的后缀就行,它会自动识别后缀来转换

convert /path/to/source.png /path/to/target.jpg
convert /path/to/source.png /path/to/target.webp

把当前文件夹下的所有PNG图片转成JPG

#只转成jpg
declare -i j=0;for i in *.PNG; do convert $i ${i:0:$[${#i}-4]}.jpg;j=j+1;echo $j"."$i" convert succeed"!; done

#转成jpg同时宽高压缩成原来的一半
declare -i j=0;for i in *.PNG; do convert $i -resize 50% ${i:0:$[${#i}-4]}.jpg;j=j+1;echo $j"."$i" convert succeed"!; done

注:${#i}表示获取i的长度,${i:m:n}表示从字符串i的第m个字符开始截取,共截取n个字符,感叹号不能放在双引号里面。

使用效果如下:
image.jpg


参考:后台使用imagemagick的convert命令来处理图片真是太方便了。

打赏
订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
Alex
Alex
2 月 前

test

0
希望看到您的想法,请发表评论。x
()
x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

ImageMagick的基本使用