【问题标题】:PIL: converting an image with mode "I" to "RGB" results in a fully white imagePIL:将模式“I”的图像转换为“RGB”会产生全白图像
【发布时间】:2013-11-22 11:04:55
【问题描述】:

据我所知,这个问题末尾的图像是一个模式 I 的 PNG,它代表 Indexed。

我正在尝试从中创建一个缩略图,并使用 PIL 将其保存为 JPG。

但是,我是否不理会mode,PIL 不会让我调整它的大小并出现错误unable to generate thumbnail: cannot write mode I as JPEG.

如果我将其转换为RGB,结果将是全白图像。

有没有办法解决这个问题?

https://www.dropbox.com/s/2d1edk2iu4ixk25/NGC281.png

【问题讨论】:

  • 嗯 - “图像”是 JPEG。有机会显示实际图像吗? (因为问题可能出在原始 PNG 上。)如果您使用 PIL 将 Indexed 转换为 RGB,(1)转换后的图像仍然可以吗? (2)如果你使用其他软件将图像转换为RGB,它是否有效?
  • 嗨,StackOverflow 在我上传图片时转换了我的图片。我编辑了提供 Dropbox 链接的问题。您的回答:(1)不,索引文件在转换为 RGB 时会变成全白; (2) 是的,它与 Gimp 一起使用。
  • 您可以再尝试一个手动步骤吗?输入文件为 16 位灰度。将其转换为 8 位并使用它运行您的原始代码。如果有效,则问题出在 PIL 上。 “灰度”与“索引”相同,为 8 位模式(256 种灰度)。也许这就是这里的根本问题。
  • 谢谢。所以我像这样转换它,它起作用了:table = [i/256 for i in range(65536)]; im = im.point(table, 'L') - 这是什么意思?`如果可能,我宁愿不通过降低位深度来丢失图像的深度。
  • PIL 模式 I 用于未编入索引的“32 位整数像素”。 PIL 中的“索引”模式将是“P(8 位像素,使用调色板映射到任何其他模式)”

标签: png python-imaging-library zlib


【解决方案1】:

输入图像是 16 位灰度 PNG,PIL 似乎对此有问题。在进一步处理之前手动将其转换为 8 位图像使其再次工作。

问题可能源自 PIL 本身。 PyPNG主页断言

..PIL 仅具有 1 位和 8 位通道值的内部表示(PIL 模式)。这让我想知道 PIL 是否可以读取位深为 2 或 4(灰度或调色板)以及位深 16(PNG 支持灰度和 RGB 图像)的 PNG 文件。

再一次,该页面来自 2009 年。可能值得追踪 PIL 的维护来源,并将其报告为错误(?或者可能是功能请求?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 2018-08-15
    • 2013-03-17
    • 2012-03-19
    • 2017-08-31
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多