代码之家  ›  专栏  ›  技术社区  ›  Jon-Eric

使用Python转换颜色格式?

  •  2
  • Jon-Eric  · 技术社区  · 15 年前

    我正在使用Python工具将图像数据转换为以下颜色格式:

    • RGBA5551
    • RGBA4444。

    最简单的方法是什么?

    Python Imaging Library (PIL) 频繁地因此,我知道如何加载图像并以RGBA8888格式获取每个像素值。我知道如何从那时起手动编写所有转换代码。

    有没有更简单的方法?也许是PIL的某种“格式化程序”插件?

    PIL是否已经支持我所针对的某些格式?如果不深入研究所有的源代码,我永远无法弄清楚PIL真正支持哪种格式。

    或者有比PIL更好的库在Python中实现这一点吗?

    任何提示都将不胜感激。谢谢

    5 回复  |  直到 15 年前
        1
  •  1
  •   mikl    15 年前

    有一个模块叫做 Python Colormath 它提供了很多不同的转换。强烈推荐。

        2
  •  1
  •   Paul    15 年前

    im = Image.open('yourimage.png')
    im.putdata([yourfunction(r,g,b) for (r,g,b) in im.getdata()])
    

    这相当快(特别是当您可以使用查找表时)。我不熟悉您提到的颜色空间,但据我所知,您知道如何实现颜色空间的转换 yourfunction(r,g,b) 应该是直截了当的。

    im.convert('RGBA', matrix) 可能非常强大,因为它在通过提供的矩阵应用颜色变换时非常快。但是我从来没有让它做我想做的事…:-/

        3
  •  1
  •   Hexbee    14 年前

    Grapefruit 这可以让你在相当多的颜色格式之间进行转换。

        4
  •  1
  •   Lennart Regebro    7 年前

    将某些内容从8位更改为5位是微不足道的。8位中的值介于0和255之间,5位中的值介于0和31之间,所以只需将值除以8即可。或在RGB565模式下为绿色时为4。或在RGBA4444模式下为16,因为它每个通道使用4位,等等。

    编辑:再读一遍你的问题,我觉得有点困惑(要么是我,要么是你)。RGB555和RGBA4444等不是真正的格式,如GIF或JPG,它们是颜色空间。这种转换是微不足道的(见上文)。以后要保存的文件格式是另一个问题。大多数文件格式对颜色空间的支持有限。例如,我认为JPEG总是将其保存在YCbCr中(但我可能弄错了),GIF使用调色板(我认为它总是RGB888),等等。

        5
  •  0
  •   Jon-Eric    15 年前

    然而,纯Python(迭代每个像素)的速度太慢了。

    PIL 加载图像并 numpy 对像素数组进行操作(转换)。