这将更好地处理文件名中的空格。
不过,结果证明这两个方案 ImageMagick 都不需要 —— 我们可以只使用 mogrify 命令。 mogrify 命令用于转换一系列文件(虽然它同样可以处理单一的图像)。
前面的代码片断将变成:
mogrify -sample 25%x25% *.jpg
注意,这将会导致原始图像被新图像所覆盖。很难指定输出文件名,这是 mogrify 的局限性之一。 指定输出文件名的惟一的方法是,改变输出文件相对于输入文件的格式。这样的结果是新的图像具有了不同的扩展名。例如:
mogrify -format png -sample 25%x25% *.jpg
这将创建一系列输出文件,这些文件的末尾的 jpg 将由 png 所取代,同时伴随着文件格式的改变。
前面定义的所有转换也都可以用 mogrify 命令来完成,所以,如果您不在意原始文件被覆盖的话,这是一个很好的选择。如果您不希望原始文件被覆盖,那么您可以将它们拷贝到一个临时目录来对它们进行转换(mogrify),并改变它们的名字 —— 或者您继续使用 convert 和 bash。
PDF 处理
到现在为止我们所讨论过的示例(不管是本文的还是前文的),都是针对独立图像的简单转换。ImageMagick 还可以一次进行不止一个图像的有趣转换,值得关注。
最常见的示例是 ImageMagick 的 PDF 处理。让我们假想一个情形,您给出了一个包含一系列图像(每页一个)的 PDF 文件。ImageMagick 将为您导出那些图像到单独的文件中。例如,下面是一个 PDF 文档的屏幕截图,其中有一些我最近到 linux.conf.au 旅游的图片(顺便说一句,实在是太美了):
图 12. 带有几个图像的 PDF 样例
让我们假定上面的 PDF 是一个朋友发给您的。您希望将图像导出以进行进一步的处理。
convert 当然可以将这些图像从 PDF 文档中导出:
convert foo.pdf pages.png
这将是我们想要做的 —— 每一页被导出为自己的 PNG 文件。不过,有一个命名方面的意外的副作用。
清单 3. 检查文件名
mikal@deathstar:~/foo$ convert foo.pdf pages.pngmikal@deathstar:~/foo$ ls pages*pages.png.0 pages.png.1 pages.png.2 pages.png.3 pages.png.4mikal@deathstar:~/foo$ |
由于命令创建了不只一个 PNG 文件,所以文件名被附加了一个惟一的编号。如果您接下来尝试使用基于文件扩展名来判断文件类型的代码或者脚本,那么将会受到影响。
作为一个友好的工具, convert 让我们可以更好地指定文件名。前面的命令实际上应该是像这样:
清单 4. 从 PDF 文档中导出页,赋以更好的文件名
mikal@deathstar:~/foo$ convert foo.pdf pages-%03d.pngmikal@deathstar:~/foo$ ls pages*pages-000.png pages-001.png pages-002.png pages-003.png pages-004.pngmikal@deathstar:~/foo$ |
%03d 是 printf风格的格式说明符。对于这种用法您需要了解的只是 %d代表一个十进制数,而且您还可以通过向序列中插入一个 0<number> 来引入一组前导零。数字指定了显示的值应该占用的位数。
还应该注意的是,您可以导出包含文本的 PDF 页。实际上其幕后机制是 ImageMagick 使用 Ghostscript 来呈现页,然后将其转换为您所选择的图像格式。不过没有进行光学字符识别 —— 您得到的是位图。
您还可以用 convert 将多个图像文件转换为 PDF。实际上前面的示例中的 PDF 是通过下面这个命令构建的:
convert dsc* foo.pdf
只需要向 convert 传递图像文件的一个列表,并确保最后一个文件名是您要将它们放入的 PDF 文档的名字。
支持每个文件多个图像的其他格式
当与 ImageMagick 一起使用时,还有其他 45 种文件格式可以存储不止一个图像,本文的 参考资料 部分有一个链接指向其完全列表。
所有这些的处理方式都与提到的 PDF 示例相同。其中一些也很有趣。能将 postscript 文件的页导出为图像(例如,考虑将您发表的论文作成缩略图放在您的 Web 站点上),或者能将您刚收到的多页传真的所有页作成一个 TIFF 图像,这些都是很方便的。
您甚至可以从 MPEG 影片中导出帧,不过那需要更深入地讨论,已经不在本文的范围之内。
结束语
在本文中我们对我的上一篇关于 ImageMagick 的文章中讨论的一些有趣的技术进行了进一步描述,包括如何使您的图像变为圆角(尤其是上一次我们讨论的小图片),给您的图像添加各种不同的漂亮边框,以及如何同时处理多幅图像。最后介绍了如何自多页格式(的文件)中导出图像,以及如何构建新的多页文档。
如果您正在寻找更多的参考资料,那么我鼓励您去访问本文 参考资料部分中给出的 ImageMagick Web 站点。还有,如果您有什么问题的话欢迎给我写信。
非常感谢那些向我提出实际问题的人,是这些问题促成了本文。我还要感谢您的耐心,因为过了很长时间我才回答这些问题。