尽管设置了密度和调整大小选项,ImageMagick 仍将 PDF 转换为小图像

ImageMagick converts PDF into tiny images despite setting density and resize options

我正在使用 ImageMagick 将以下 PDF 转换为 PNG 文件:PDF from IMSLP (Permalink)

在 PDF 查看器中它看起来不错(尽管它需要相当大的缩放):

但是当使用

转换时
convert "file.pdf" "/tmp/file.png"

生成的图像分辨率极低:

当添加密度和调整大小信息时,我得到了更大的图像,但仍然不是 PDF 中存储的原始分辨率(当然不是 300 DPI)

convert -density "300" -resize "3000x3000>" "file.pdf" "/tmp/file.png"

当使用 Poppler-Utils' pdfimages 时,我得到了合适的图像:

我的问题是:有什么方法可以告诉 ImageMagick 以“正确”的分辨率(如存储在 PDF 文档中的那样)提取图像?换句话说,忽略正确查看 PDF 所需的缩放,从而提取正确的图像分辨率?

我在 Alpine Linux docker 图像中使用 ImageMagick 7.1.0.16 和 Ghostscript 9.55.0。

您需要增加密度并在读取 Imagemagick 中的输入后调整大小。

这将是 5800 × 7200 像素:

convert -density 4800 IMSLP358086-PMLP578359-Ehr_OP_20_5.pdf[1] x.png

这将是 2417 × 3000 像素:

convert -density 4800 IMSLP358086-PMLP578359-Ehr_OP_20_5.pdf[1] -resize "3000x3000>" y.png

非常不寻常的结构,它经历了许多变化,但我们可以猜测某些页面可能已转换为 300 dpi 或 600 dpi,因为它们都以大致相同的尺寸呈现。

请注意,图形 dpi 是主观的,它不是 PDF 中使用的值,它是与图形工作 dpi 相关的默认 72 点单位的像素。图像可能是 75 dpi,但存储为每 72 点 300 像素。

第 1 次分析表明图像是

  • image-0028 = 714 X 900 点标称 600 dpi
  • image-0002 = 726 X 900 点标称 600 dpi
  • image-0005 = 674 x 900 点标称 600 dpi
  • image-0008 = 674 x 900 点标称 600 dpi
  • image-0011 = 674 x 900 点标称 600 dpi
  • image-0014 = 674 x 900 点标称 600 dpi

但所有尺寸都已 down-sampled 约。 1.2" x 1.5" 所以一个合理的源尺寸来匹配所有这些减少是可能的 9.6" x 12" 有一些裁剪。

从而获得最接近原始质量的提取页面@600 dpi(无损 png 最好保留那些有损 jpeg 缺陷)

然后将它们重新转换为 75 dpi 应该会让您最接近劣质输入。