Work the Shell - 使用 ImageMagick 捣鼓

作者:Dave Taylor

我之前写过关于在 shell 脚本中处理图形图像的文章,显然,这有点棘手,因为,嗯,脚本通常最擅长处理文本,你甚至看不到图形,更不用说直接操作它们了。此外,坦率地说,标准的 Linux/UNIX 系统附带的实用程序套件根本不包含太多可以帮助您处理图形或图像文件的程序。

幸运的是,有一个很棒的开源软件包叫做 ImageMagick,它实际上旨在使从命令行处理图像文件变得简单快捷。它是许多图像实用程序的智能后端,只需快速访问 www.imagemagick.org,您也可以下载它。

安装它需要几个不同的步骤,这次,我实际上打算玩玩我的 Apple MacBook Pro,并将实用程序安装到 Mac OS X 的 Darwin 世界中。

在 Darwin/NetBSD 中安装 ImageMagick

由于 99% 的时间我使用 Mac 时都以 taylor 身份登录,所以我选择将软件放到我自己的个人 bin 目录中,而不是更标准的 /usr/local/src 位置(二进制文件位于 /usr/local/bin 中)。也许我是一个长期的 UNIX 极客或其他什么,但我无论如何都有我自己的 ~/bin(或者 $HOME/bin,如果您喜欢)目录,所以一旦二进制文件下载完成,这就是我所做的

cd ../bin
tar xvf ../Downloads/ImageMagick-i386-apple-darwin9.6.0.tar

因为这个特定的发行版包含预编译的二进制文件,所以只需调整几个环境变量来添加解压目录并继续即可,这非常容易

export MAGICK_HOME="/Users/taylor/bin/ImageMagick-6.5.2"
export PATH="$MAGICK_HOME/bin:$PATH"
export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib"

最好将这些添加到您的 ~/.profile 或 ~/.cshrc(如果您使用 Csh,但为什么要用呢?),以便每次您登录时或在 Mac 环境中,生成新的终端 shell 时都会调用它们。

测试新安装的程序也是一个好主意。找到一个 .gif、.jpg 或 .png 文件,看看 ImageMagick identify 程序说了什么。这是我做的

$ find . -name "*png" -o -name "*.jpg" -o -name "*gif"
./iphone-id.png
$ identify iphone-id.png
iphone-id.png PNG 470x118 470x118+0+0 8-bit DirectClass 12.2kb

它比 file 命令更有用,file 命令报告

$ file iphone-id.png
iphone-id.png: PNG image data, 470 x 118, 8-bit/color RGB, non-interlaced

identify 真正闪光的地方是 JPEG 文件,file 命令似乎无法识别出来。我不知道为什么会这样,但这个缺点是我在我的系统上安装 ImageMagick 的主要原因。

使用 ImageMagick 做一些有用的事情

我的爱好之一是摄影,作为一名家长,我发现我经常最终成为学校活动的“官方”摄影师。我最近为我女儿的五月节活动做了这件事,结果得到了大约 500 个 5-8MB 的图像文件,这些文件非常适合打印(大约 4,200x2,800),但不太适合在电脑屏幕上观看。我想做的是创建大约 1,024x800 左右的图像,以便它们在典型的电脑屏幕上以 100% 的比例观看,在一个与原始图像文件目录平行的目录中。这样,家长可以观看较小图像的幻灯片,然后如果他们想上传并订购打印件,可以抓取同名的较大图像。

使用 ImageMagick,这很容易。事实上,如果我想使用 mogrify 命令,我可以很容易地在一个命令中完成所有操作,但因为我喜欢晦涩、复杂的解决方案而不是简单、优雅的解决方案,所以我决定使用 convert 命令代替。

挑战在于,像 ImageMagick 中的其他所有东西一样,convert 应用程序有大量的不同命令标志。输入convert,您就会明白我的意思。

仔细研究它们,这是我想使用的标志

-resize geometry     resize the image

这听起来像是我们需要调整图像大小,尽管“geometry”仍然有点未知。现在是时候访问 ImageMagick 网站了,我们在那里找到了大量的 geometry 选项,包括

  • scale%: 高度和宽度都按指定的百分比缩放。

  • scale-x%xscale-y%: 高度和宽度分别按指定的百分比缩放。

  • width: 给定宽度,自动选择高度以保持宽高比。

  • xheight: 给定高度,自动选择宽度以保持宽高比。

  • widthxheight: 给定高度和宽度的最大值,保持宽高比。

为了完成我们想要的转换,我们可以简单地指定所需的宽度,并让实用程序完成所有工作

$ identify DSC_7466.JPG
DSC_7466.JPG JPEG 4288x2848 4288x2848+0+0 
 ↪8-bit DirectClass 8.148mb
$ convert -resize 1024 DSC_7466.JPG smaller-DSC_7466.JPG
$ identify smaller-DSC_7466.JPG
smaller-DSC_7466.JPG JPEG 1024x680 1024x680+0+0 8-bit 
 ↪DirectClass 776kb

正如所希望的那样,4,288x2,848 的图像被缩小到 1,024x680,并且新的、较小的图像以新文件名保存。

太棒了!快速mkdir smaller,我们就开始工作了,所以我使用一个 shell for 循环来迭代 500 个图像

for filename in *.png
do
  convert -resize "50%" $filename smaller/$filename
done

一旦您经历了安装 ImageMagick 程序的麻烦,很高兴看到可以如此轻松地完成许多不同的任务。

Dave Taylor 自 1980 年首次登录在线网络以来就一直参与 UNIX。这意味着,是的,他现在即将达到 30 年的里程碑。您几乎可以在任何地方在线找到他,但从这里开始:www.DaveTaylorOnline.com。除了他的所有其他项目外,Dave 现在还是一名影评人。您可以在 www.DaveOnFilm.com 上阅读他的评论。

加载 Disqus 评论