【问题标题】:PIL Image mode "P" -> "RGBA"PIL 图像模式“P”->“RGBA”
【发布时间】:2012-09-09 20:43:23
【问题描述】:

这是我的问题:

import Image
im = Image.open("1.png")
im.show()
print im.mode
im.convert("RGBA").save("2.png")

嗯,通过我的图片,您可以看到不同之处。
我的问题是:如何正确转换它?

图片:

结果:

注意:原始图像具有半透明发光,结果具有纯绿色“发光”

【问题讨论】:

  • 你能解释一下问题是什么吗?
  • 您实际上并没有说有什么区别。您包含的图像是之前还是之后?
  • 测试过了。没看出有什么区别。你用的是什么python和pil版本?
  • this问答。阅读答案和他们的 cmets!
  • @mDroidd:FWIW 生成的 RGBA 实际上确实有一个设置为透明度的 alpha 层,该层设置在与托盘图像中的像素完全相同的像素上。换句话说,托盘图像中的“发光”像素根本没有标记为透明——我认为这就是它们不在 RGBA 结果中的原因。我还注意到只有在浏览器中查看图像时才能看到发光,而在我通常使用的图像编辑器(Photoshop)中看不到。这没有意义,我正试图弄清楚发生了什么以及为什么。

标签: python python-imaging-library converter mode


【解决方案1】:

您的问题是您没有提供有关 PIL 应该使用什么作为 ALPHA 通道来源的信息。

PIL 不会单独为您的图像添加透明度。

您希望图像的哪一部分透明?

【讨论】:

  • 原始“P”图像中透明和/或半透明的部分:P 还有自动检测,因为这不是我需要转换的唯一图像...
  • 抱歉,对我来说,两张图片看起来一模一样。你能在第三张图片上用红色标记应该透明的部分吗?
【解决方案2】:

不幸的是,您的 PNG 图像是 PIL 不能很好处理的类型 - 带有 alpha 通道的调色板图像。当您打开图像时,alpha 被丢弃,无法取回。

这与通常的调色板透明度不同,后者使用调色板的一个索引来表示完全透明的像素。

【讨论】:

【解决方案3】:

这里报告了这个问题:

https://bitbucket.org/effbot/pil-2009-raclette/issue/8/corrupting-images-in-palette-mode

2012 年 3 月,一条评论说它现在已在 PIL 的开发版本中得到修复。最新发布的版本是 1.1.7,因此在 1.2 发布之前无法使用此修复程序。 PIL 更新非常很慢,所以不要指望它很快就会出来。

【讨论】:

    【解决方案4】:

    你可以使用scipy.misc.imread:

    img = scipy.misc.imread(filename, mode='RGBA')
    img = Image.fromarray(img)
    

    【讨论】:

    • 我认为这是最近从 scipy 中弃用的,没有替换。我目前正在移动度假,所以很难找到我。
    猜你喜欢
    • 2019-02-17
    • 2021-04-28
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多