在 Imagemagick 中转换图像时出错

Posted

技术标签:

【中文标题】在 Imagemagick 中转换图像时出错【英文标题】:Error in converting images in Imagemagick 【发布时间】:2018-07-15 16:21:26 【问题描述】:

我使用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就可以了,但是背景比较暗。同样的警告仍然存在。问题是什么?谢谢。

【问题讨论】:

也许你有一个 "mad" PDF。你愿意分享吗? PNG 不喜欢为灰度图像添加颜色配置文件。这只是一个警告,应该会产生您的输出。如果您不想看到警告,请将 -quiet 添加到您的 Imagemagick 命令中。请注意 -quality 90 可能不适用于 PNG。 PNG 不使用与 JPG 相同的质量代码。见imagemagick.org/script/command-line-options.php#quality 你确定图片是黑色的,不是透明背景吗?试试看:Magick convert -density 300 PointOnLine.pdf -quality 90 -flatten PointOnLine.png @user585440 带有flatten 参数和alpha channel 的答案应该是我的,因为我问你很久了......但你没有回答我......跨度> @shadowsheep,你应该发布你的答案 【参考方案1】:

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

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

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

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

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

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

【讨论】:

【参考方案2】:

如果您发布 PDF,我可以查看。否则,可能是 CMYK,PNG 不支持。所以试试

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

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

【讨论】:

@ fmw42,我不知道如何发布 pdf。 将它发布到一些免费的托管服务,例如 dropbox.com 并将 URL 放在这里【参考方案3】:

以下内容在 ImageMagick 7.0.7.22 Q16 Mac OSX Sierra 和 Ghostscript 9.21 和 libpng @1.6.34_0 中对我有效。您的 PDF 有一个 Alpha 通道,因此您可能需要将其展平。

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

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

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=""gs" -sstdout=%%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>

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

【讨论】:

它给出了“magick: profile 'icc': 'RGB': RGB color space not allowed on grayscale PNG `result.png' @ warning/png.c/MagickPNGWarningHandler/1744.”。但图像还可以。 不展平,图片背景不是白色的。 我没有收到任何配置文件错误。我想这是你的 libpng 版本。您的图像具有 Alpha 通道。如果没有 -flatten ,它将显示 png 背景中的任何内容都在 png 的透明度之下。您可以通过包含 -background somecolor 将其强制为您想要的任何颜色。是否有某些原因应该删除图像?它们似乎不是专有的。删除发布的图像是一种不好的形式。但如果你坚持,我会删除它们。 尝试在命令行中的magick之后添加-quiet。这会消除消息吗?【参考方案4】:

对我有用的命令是:

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

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

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

tesseract PointOnLine.tiff PointOnLine

【讨论】:

这个解决方案对我有用,每页创建一个图像。接受的答案将 pdf 的所有页面展平在一个图像中。【参考方案5】:

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

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

【讨论】:

以上是关于在 Imagemagick 中转换图像时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageMagick 创建 GIF 图像时出错:异常过多和闪烁问题

使用 ImageMagick 将 pdf 转换为 png 时出错

ImageMagick:转换、裁剪、调整大图像

当我只想在 JPG 和 PNG 之间转换时,为啥 ImageMagick 会改变图像亮度?

Imagemagick在将pdf转换为图像时删除上部内容

将PDF转换为图像时,ImageMagick会更改颜色