ImageMagick分割PDF输出文件名总是从零开始

6
我在 ImageMagick 中运行以下命令来分割 PDF:

convert file.pdf[5-10] file.png

生成的输出文件总是以零为后缀开始。 也就是说:

file-0.png,file-1.png,file-2.png ...

你有什么想法吗?文档说明文件应从5开始后缀,匹配提取的页面的页码。
2个回答

8

我最终通过使用命令行参数-scene #解决了这个问题。

这将导致输出从所需的索引开始。为了记录:

convert file.pdf -scene 5 file-%d.png

3
您看到的结果是由于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.pngfile-002.pngfile-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

感谢提供的信息。最终我使用了“-scene#”命令解决了这个问题,该命令使输出从所需索引开始。为了后世留存,附上代码:
convert file.pdf -scene 5 file-%d.png
- Csizzle
@Csizzle:哦,谢谢 :-) -- 这对我来说是个好消息。我不知道这个。我认为你应该把它作为一个完整的答案添加进去。你甚至可以接受自己的答案(我肯定会点赞的 :-) - Kurt Pfeifle

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