您看到的结果是由于ImageMagick用于多页图像格式的页面计数是从0开始的,因此第一页的索引为0,第二页的索引为1,以此类推。
另外,ImageMagick本身无法处理PDF输入文件:它使用Ghostscript作为其“委托”-- Ghostscript首先消费PDF并针对每个PDF页面发出光栅文件。然后,只有这些光栅文件才会被ImageMagick处理。
根据您的ImageMagick版本和IM设置,这可能导致间接生成PNG输出,并且转换链可能如下所示:
PDF --> PPM (portable pixmap) --> PNG
^ ^
| |
| +-- (handled by ImageMagick)
+-- (handled by Ghostscript)
如果您运气不好,转换结果会很慢,质量可能不如预期。
要验证“convert a.pdf a.png”命令中确切发生了什么,您可以添加“-verbose”参数。这将显示由IM用于处理PDF输入的Ghostscript命令:
convert -verbose a.pdf a.png
/var/tmp/magick-15951W3TZ3WRpwIUk1 PNG 612x792 612x792+0+0 8-bit sRGB 3.73KB 0.000u 0:00.000
a.pdf PDF 612x792 612x792+0+0 16-bit sRGB 3.73KB 0.000u 0:00.000
a.pdf=>a.png PDF 612x792 612x792+0+0 8-bit sRGB 2c 2.95KB 0.000u 0:00.000
[ghostscript library] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
-dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" \
"-sOutputFile=/var/tmp/magick-15951W3TZ3WRpwIUk%d" \
"-f/var/tmp/magick-15951nJD8-fF8kA7j" \
"-f/var/tmp/magick-15951JTZDMwtEswHn"
(正如您所看到的,我的 IM 安装已设置为无需经过 PPM 的 PDF->PNG 转换... 您的效果可能会有所不同。)
直接使用Ghostscript可能会获得更好的结果,而不是运行IM convert
命令。(如果 ImageMagick 可以执行 PDF->PNG 转换,则肯定已安装了 Ghostscript)因此,您可以尝试以下内容:
gs \
-o file-%03d.png \
-sDEVICE=pngalpha \
file.pdf
-%03d
文件名后缀会导致 Ghostscript 输出
file-001.png
、
file-002.png
和
file-003.png
。
然而,如果您不幸安装了旧版本的 Ghostscript,则文件名也将以
file-000
开头...
无论如何,由于您的示例命令似乎表明您只想从 PDF 文件中转换一个页面范围(5--10)(而不是所有页面),因此请使用以下命令:
gs \
-o file-%03d.png \
-sDEVICE=pngalpha \
-dFirstPage=5 \
-dLastPage=10 \
file.pdf
但是这里的坏消息是:Ghostscript仍然会以
file-001.png
(第5页)...
file-005.png
(第10页)的方式命名输出文件。
为了解决这个问题,你需要生成前4页的PNG文件,并稍后再将它们删除。
gs \
-o file-%03d.png \
-sDEVICE=pngalpha \
-dFirstPage=1 \
-dLastPage=10 \
file.pdf
rm -rf file-00{1,2,3,4}.png