【问题标题】:ImageMagick removes colors when alpha is 0 (png)ImageMagick 在 alpha 为 0 时移除颜色(png)
【发布时间】:2019-02-27 09:30:34
【问题描述】:

我正在使用 imagemagick 为视频游戏转换许多 3D 纹理。我的源文件是 png,我的目标文件也是 png。但我注意到,每当 alpha 通道降至 0.0 时,我的颜色信息就消失了(我需要它们)。我只想按原样缩放所有频道。我想有一个小开关可以解决这个问题,但截止日期快到了,我找不到任何相关信息。

重现这个的简单命令: convert source-with-alpha.png -scale 2014 target.png(我也试过-resize,也没用)。

虽然convert source-with-alpha.png target.png 工作正常(但没有按比例缩小)。

感谢您的帮助。

【问题讨论】:

  • 请发布示例输入和输出图像的链接,以便我们了解问题所在。也许您需要升级 libpng 或 imagemagick 或两者兼而有之。你用的是什么版本? convert -version 会告诉你你的 ImageMagick 版本,convert -list format 会在 PNG 行的右侧显示 PNG 版本。

标签: imagemagick


【解决方案1】:

我猜 ImageMagick 正在尝试优化某些东西,但不确定是什么/为什么。也许这个想法是,如果某些东西是透明的,你就看不到它,所以我们不妨把它变成黑色,这样它就可以很好地压缩。

无论如何,尝试分离通道,使它们都被视为独立通道,然后调整大小并重新组合:

convert input.png -channel RGBA -separate -resize XxY -combine result.png

【讨论】:

  • 感谢您的帮助。我想过类似的事情,但我对 imagemagick 还是很陌生,我认为它会复杂得多。该解决方案运行良好,只要系统允许我这样做,我就会接受这个答案。再次感谢您!
【解决方案2】:

我不确定我是否理解您的问题。使用 ImageMagick 6.9.10.28 Q16 Mac OSX 和 libpng 1.6.36 调整透明 PNG 图像的大小没有问题。也许您需要升级其中一个或两个。

图片:

把白色变成透明:

convert logo.png -transparent white logot.png


调整大小:

convert logot.png -resize 25% logot_small.png


【讨论】:

    【解决方案3】:

    我用两个不同版本的 Windows imagemagick 尝试了 Mark Setchell 的回答,但我仍然遇到这个问题。 如果调整大小时 alpha 为 0,则 RGB 变为 0。 一种解决方法是稍微添加 alpha,使其变为非零:

    magic.exe input.tga -channel a -evaluate add 0.2% -channel RGBA -separate -filter Quadratic -resize -resize XxY! -combine result.tga
    

    或者也(同样的结果)

    magick.exe ( input.tga -alpha off -filter Quadratic -resize XxY! ) ( input.tga -filter Quadratic -resize XxY! -alpha extract -evaluate add 0.2% )  -compose Copy_Alpha -composite result.tga
    

    (“-filter Quadratic”是可选的)

    【讨论】:

      【解决方案4】:

      发布您的一个 tga 文件,以便我们对其进行测试。你的 ImageMagick 版本是多少?应该不需要任何开关。这对我来说在 IM 6.9.10.65 Q16 Mac OSX 上运行良好。

      制作透明的 TGA:

      convert logo: -transparent white logo.tga
      

      transparent tga image


      调整大小 50%

      convert logo.tga -resize 50% logo2.tga
      

      resized transparent tga image

      【讨论】:

      • 您需要一个具有 RGB 值(非 0)但 alpha 为 0 的输入纹理来测试它。 RGB 值变为 0。使用 ImageMagick-7.0.8-66-portable-Q16-x64 测试。通过电子邮件向您发送样品
      猜你喜欢
      • 2015-02-03
      • 2014-12-12
      • 2016-04-30
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多