Image 将PDF转换为PNG
我正在尝试将PDF转换为PNG图像(至少是其中一个的封面)。我正在使用pdftk成功提取PDF的第一页。我正在使用imagemagick进行转换:Image 将PDF转换为PNG,image,pdf,png,imagemagick,ghostscript,Image,Pdf,Png,Imagemagick,Ghostscript,我正在尝试将PDF转换为PNG图像(至少是其中一个的封面)。我正在使用pdftk成功提取PDF的第一页。我正在使用imagemagick进行转换: convert cover.pdf cover.png 这是可行的,但遗憾的是cover.png的渲染不正确(PDF中的一些alpha对象没有正确渲染)。我知道ImageMagick使用GhostScript进行转换,如果我直接使用gs进行转换,我可以获得所需的结果,但我更愿意使用转换库,因为它还有其他我想要利用的工具 GhostScript中的此
convert cover.pdf cover.png
这是可行的,但遗憾的是cover.png的渲染不正确(PDF中的一些alpha对象没有正确渲染)。我知道ImageMagick使用GhostScript进行转换,如果我直接使用gs进行转换,我可以获得所需的结果,但我更愿意使用转换库,因为它还有其他我想要利用的工具
GhostScript中的此命令完成所需的图像:
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf
我想知道有什么方法可以通过convert to GhostScript传递参数,还是我只能直接调用GhostScript?如果第一个命令可以将其输出写入stdout,则可以使用一条命令行和两个通过管道连接的命令(
gs
,convert
),如果第二个可以从stdin读取其输入
…-o%stdout…
)李>
convert-background transparent-output.png
)- 用于alpha通道处理特殊图像的GS
- 转换用于创建透明背景
- 用于避免在磁盘上写入临时文件的管道
gs -sDEVICE=pngalpha \
-o %stdout \
-r144 cover.pdf \
| \
convert \
-background transparent \
- \
cover.png
更新 如果希望每个PDF页面有一个单独的PNG,可以使用
%d
语法:
gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf
这将创建名为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
我会添加我的解决方案,即使他的线程是旧的。也许这将帮助别人无论如何 首先,我需要生成PDF。我使用它:
xelatex test.tex
现在,两个从左到右的解析参数,也就是最左边的参数,都将首先执行。最后,我使用以下顺序进行优化处理:
gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png
它在透明背景上提供了漂亮的图形,并根据页面上的实际内容进行了修剪。-density
和-resize
参数提供了更好的粒度,提高了整体分辨率
我建议您检查密度是否可以降低。这将缩短转换时间。在所有可用的替代方案中,我发现Inkscape在将PDF转换为PNG时可以产生最准确的结果。特别是当源文件具有透明层时,Inkscape成功地实现了Imagemagick和其他工具的失败 这是我使用的命令:
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
在这里,它是在一个脚本中实现的:
#!/bin/bash
while [ $# -gt 0 ]; do
pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift
done
echo "All jobs done. Exiting."
我的解决方案更简单、更直接。至少在我的电脑上是这样的(规格如下): 与 下面是我在
文件.pdf中运行的内容:
me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png
无法获得可接受的答案。然后发现实际上解决方案要简单得多,因为Ghostscript不仅在本机上支持PNG,甚至:
png256
png16
pnggray
pngmono
适用于我的shell命令是:
gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf
它将使用pnggray
编码和500 DPI将test.pdf的第2页保存到test.png。对于ImageMagick给出不准确颜色的pdf,我发现GraphicsMagick做得更好:
$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg
要将pdf转换为图像文件,请使用以下命令:
用于PNGgs-sDEVICE=png16m-dTextAlphaBits=4-r300-o a.PNG a.pdf
用于JPGgs-sDEVICE=jpeg-dTextAlphaBits=4-r300-o a.JPG a.pdf
如果您有多个页面,请添加到name%03dgs-o a%03d.jpg a.pdf
每个选项的含义:
- sDEVICE={jpeg,pngalpha,png16m…}-文件类型
- -o-输出文件(%stdout到stdout)
- -dTextAlphaBits=4-字体抗锯齿
- -r300-300 dpi
还可以使用
poppler utils
包中包含的命令行实用程序:
sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help
例如:
pdftocairo -png mypage.pdf mypage.png
由于本页还列出了可供选择的工具,我将提到,该工具已准备好为Linux/Windows/Mac编译命令行工具。支持透明性。可免费用于商业用途,而Ghostscript的定价实在太高了
在一个大型PDF文件的测试中,它比Ghostscript快7.5%
(它还具有PDF到文本和HTML的转换器)您可以使用ImageMagick,而无需使用其他工具分隔PDF的第一页。只需这样做即可
convert -density 288 cover.pdf[0] -resize 25% cover.png
在这里,我将标称密度增加400%(72*4=288),然后调整1/4(25%)的大小。这为生成的png提供了更好的质量
但是,如果PDF是CMYK,PNG则不支持。它需要转换为sRGB,特别是如果它具有透明度,因为Ghostscript无法使用alpha处理CMYK
convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png
尝试提取单个页面
$page=4
gs -sDEVICE=pngalpha -dFirstPage="$page" -dLastPage="$page" -o thumb.png -r144 input.pdf
为什么直接调用GhostScript是一个问题?这真的没什么大不了的。我想同时通过convert运行一些其他参数,如果我能将所有参数都保存在一个命令中就好了。保持我的代码更干净、更一致。这也意味着少了一个临时文件。另请参见和。调用gs和d ImageMagick如何称呼它?可能值得向ImageMagick上游报告一些事情(请关注,更新ghostscript也有帮助…)这只适用于我在gs选项中添加-dBATCH-dNOPAUSE-dQUIET
。@ford:这意味着你有一个旧版本的Ghostscript。最新版本可以执行-o输出.file
,同时自动且无声地设置-dBATCH-dNOPAUSE-dQUIET
。@ford:但是,我有一个
convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png
gs -sDEVICE=pngalpha -dFirstPage="$page" -dLastPage="$page" -o thumb.png -r144 input.pdf