如何使用Ghostscript或ImageMagick从PDF中提取图像?

19

我需要渲染或提取特定PDF文件中的所有图像。如何使用Ghostscript或ImageMagick实现这一目标?


1
最好使用pdfimages。 - fmw42
4个回答

27
你不能通过Ghostscript实现,但你可以使用Poppler或XPDF的命令行工具pdfimages来实现:
pdfimages -j some.pdf subdir/image-prefix

所有图像现在都将位于名为 subdir/ 的目录中,命名格式为 image-prefix-0001.jpgimage-prefix-0002.jpg ...。
使用-j参数可以尝试直接提取JPEG。如果无法创建JPEG,则会创建PNM或PPM文件,您始终可以使用ImageMagick进行转换:
convert subdir/image-prefix-0033.ppm subdir/image-prefix-0033.jpeg

我想做类似的事情,但我想完全从pdf中删除所有图像,即pdf应该只包含文本/字体而没有图像,这可以实现吗?请帮忙。 - hussainb
1
@codin:评论不适合讨论全新的话题。请提出一个新问题,将其标记为“[ghostscript]”+“[pdf]”,我会尽力回答。请同时说明您请求的目的。节省文件大小?删除图像中包含的信息?还是其他? - Kurt Pfeifle
对于第二步,Mogrify 似乎更为合适:magick mogrify -format jpg *.ppm - Dorian Grv
为什么不直接使用convert呢?convert some.pdf image-prefix.jpg - patxiska
1
@patxiska 为什么不尝试两种变体来亲自看看它们之间的区别呢?(您的 convert 将 PDF 页面转换为包含页面文本部分的全页图像;而 pdfimages 则提取嵌入在 PDF 页面中的图像,而不包括文本部分。) - Kurt Pfeifle

2

我想使用GS或ImageMagick的原因是它们使用脚本,可以通过Java运行。您推荐使用任何使用命令行命令或脚本来实现此目的的PDF工具吗? - mmoghrabi
pdftk可以提取附件,但似乎无法提取图像。 - bonh

-1

ImageMagick还提供了以下语法选项,将PDF转换为图像:

convert /path/to/file.pdf /path/to/output/file.png

除了“常规”转换外,它还提供了许多有用的选项,例如:

  • 仅提取几页(通过在PDF文件名后添加[0-n],例如convert "file.pdf[0-1]" /path/to/output/file.png
  • 使用PDF文档中定义的裁剪框 -define pdf:use-cropbox=true
  • 更改输出密度DPI -density 300
  • 将图像缩放到特定大小,例如最大2000x2000px,使用-resize 2000x2000>
  • 为具有透明度的PDF设置背景颜色,使用-background white
  • 删除Alpha通道-alpha remove -alpha off

等等。


-3

例如提取1页:

gs -q -dBATCH -dNOPAUSE -sDEVICE=pnggray -d300 -dFirstPage=1 -dLastPage=1 -sOutputFile=1.tiff in.pdf

4
这并不提取原始图像,而是根据页面的外观呈现图像。例如,如果您在图像上叠加了文本,则渲染的图像中也会显示该文本。 - mlissner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接