在 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="&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: 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 时出错