我正在尝试将 PDF 转换为 PNG 图像(至少是一个封面)。我已经使用 pdftk 成功提取了 PDF 的第一页。我正在使用 imagemagick 进行转换:
convert cover.pdf cover.png
这是可行的,但不幸的是 cover.png 渲染不正确(PDF 中的某些 alpha 对象未正确渲染)。我知道 ImageMagick 使用 GhostScript 进行转换,如果我直接使用 gs 进行转换,我可以获得所需的结果,但我宁愿使用转换库,因为它还有我想利用的其他工具。
GhostScript 中的此命令可完成所需的图像:
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf
我想知道是否有任何方法可以通过转换为 GhostScript 传递参数,或者我是否坚持直接调用 GhostScript?
您可以使用一个命令行来执行两个命令(gs
, convert
)通过管道连接,如果第一个命令可以将其输出写入 stdout,并且第二个命令可以从 stdin 读取其输入。
- 幸运的是,gs 可以写入标准输出(
... -o %stdout ...
).
- 幸运的是,convert 可以从 stdin 读取(
convert -background transparent - output.png
).
问题解决了:
- GS 用于处理特殊图像的 alpha 通道,
- 转换用于创建透明背景,
- 用于避免在磁盘上写出临时文件的管道。
完整的解决方案:
gs -sDEVICE=pngalpha \
-o %stdout \
-r144 cover.pdf \
| \
convert \
-background transparent \
- \
cover.png
Update
如果您想每个 PDF 页面有一个单独的 PNG,您可以使用%d
syntax:
gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf
这将创建名为的 PNG 文件page-000.png
, page-001.png
, ...(请注意%d
-计数是从零开始的--file-000.png
对应于 PDF 的第 1 页,001
到第 2 页...
或者,如果您想保留透明背景,对于 100 页的 PDF,请执行以下操作
for i in {1..100}; do \
\
gs -sDEVICE=pngalpha \
-dFirstPage="${i}" \
-dLastPage="${i}" \
-o %stdout \
-r144 input.pdf \
| \
convert \
-background transparent \
- \
page-${i}.png ; \
\
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)