在 Imagemagick 中转换图像时出错

Error in converting images in Imagemagick

我使用Imagemagick convert将pdf文件转成png格式如下:

Magick convert -density 300 PointOnLine.pdf -quality 90 PointOnLine.png

它给了我以下警告:

convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `PointOnLine.png' @ warning/png.c/MagickPNGWarningHandler/1744.

创建的png图像全黑。但是,转换为 jpg 图像就可以了。

更新:添加-define profile:skip=ICC后,图像仍然很暗。但是如果转成jpg再转成png就可以了,就是背景暗了。同样的警告仍然存在。问题是什么?谢谢

我了解到您在 Windows 下使用 ImageMagick,即使没有说明(也没有发布 IM、Win 的相应版本)

我在 Ubuntu 16.04 LTS 下,我会提供一个 可能 有用的答案。 (在 Win 下,在所有内容前加上 Magick)。 对我来说,

convert -density 300 -quality 90 PointOnLine.pdf PointOnLine.png

工作正常,没有警告,产生合适的输出。 我尝试了其他也有效的方法,其中一些可能适合您。

  1. 首先将您的 pdf 转换为 RGB,然后再转换为 png。

    convert -density 300 -colorspace RGB PointOnLine.pdf PointOnLine_rgb.pdf
    convert -density 300 PointOnLine_rgb.pdf PointOnLine_rgb.png
    

如果你 post 你的 PDF,我可以查看。否则,可能是 CMYK,PNG 不支持。所以试试

magick -quiet -density 300 -colorspace srgb PointOnLine.pdf -quality 90 PointOnLine.png


注意在 IM 7 中,使用 magick 而不是 magick convert。也不是 PNG 和 JPG 的质量不同。参见 https://www.imagemagick.org/script/command-line-options.php#quality

以下在 ImageMagick 7.0.7.22 Q16 Mac OSX Sierra with Ghostscript 9.21 和 libpng @1.6.34_0 中对我没有错误。您的 PDF 有一个 alpha 通道,因此您可能想要展平它。

magick -density 300 PointOnLine.pdf -flatten -quality 90 result.png

这也可以正常工作,但会在 png 中保留 alpha 通道,尽管在提取图像之前您不会在此处看到它:

magick -density 300 PointOnLine.pdf -quality 90 result2.png

请注意,在 IM 7 中,您应该只使用 magick 而不是 magick convert。

如果您没有得到相同的结果,请检查您使用的是否是当前版本的 Ghostscript 和 libpng。

您 PS:alpha 的 delegates.xml 文件应该显示 sDEVICE=pngalpha 而不是 pnmraw,如下所示。

<delegate decode="ps:alpha" stealth="True" command="&quot;gs&quot; -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pngalpha&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/>

用户要求删除我发布的结果图像!

对我有用的命令是:

magick -density 300 PointOnLine.pdf -depth 8 -strip -background white -alpha off PointOnLine.tiff

它没有给出任何警告,也删除了黑色背景。

之后我可以使用 tesseract 将其转换为文本:

tesseract PointOnLine.tiff PointOnLine

我遇到了同样的问题并解决了在输出文件名前添加 -colorspace RGB。

convert -density 300 PointOnLine.pdf -quality 90 -colorspace RGB PointOnLine.png