首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

通过命令行进一步处理图形--PDF 处理

通过命令行进一步处理图形--PDF 处理

到现在为止我们所讨论过的示例(不管是本文的还是前文的),都是针对独立图像的简单转换。ImageMagick 还可以一次进行不止一个图像的有趣转换,值得关注。
最常见的示例是 ImageMagick 的 PDF 处理。让我们假想一个情形,您给出了一个包含一系列图像(每页一个)的 PDF 文件。ImageMagick 将为您导出那些图像到单独的文件中。例如,下面是一个 PDF 文档的屏幕截图,其中有一些我最近到 linux.conf.au 旅游的图片(顺便说一句,实在是太美了):
图 12. 带有几个图像的 PDF 样例让我们假定上面的 PDF 是一个朋友发给您的。您希望将图像导出以进行进一步的处理。
convert 当然可以将这些图像从 PDF 文档中导出:      
convert foo.pdf pages.png
这将是我们想要做的 —— 每一页被导出为自己的 PNG 文件。不过,有一个命名方面的意外的副作用。
清单 3. 检查文件名
1
2
3
4
mikal@deathstar:~/foo$ convert foo.pdf pages.png
mikal@deathstar:~/foo$ ls pages*
pages.png.0  pages.png.1  pages.png.2  pages.png.3  pages.png.4
mikal@deathstar:~/foo$




由于命令创建了不只一个 PNG 文件,所以文件名被附加了一个惟一的编号。如果您接下来尝试使用基于文件扩展名来判断文件类型的代码或者脚本,那么将会受到影响。
作为一个友好的工具,         convert 让我们可以更好地指定文件名。前面的命令实际上应该是像这样:      
清单 4. 从 PDF 文档中导出页,赋以更好的文件名
1
2
3
4
mikal@deathstar:~/foo$ convert foo.pdf pages-%03d.png
mikal@deathstar:~/foo$ ls pages*
pages-000.png  pages-001.png  pages-002.png  pages-003.png  pages-004.png
mikal@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 影片中导出帧,不过那需要更深入地讨论,已经不在本文的范围之内。
返回列表