我正在使用Python工具将图像数据转换为这些颜色格式:
实现这一目标的最简单方法是什么?
我经常使用Python Imaging Library (PIL)。所以我知道如何加载图像并获得RGBA8888格式的每个像素值。我知道如何从那一点手动编写所有转换代码。
有更简单的方法吗? PIL可能是某种类型的'格式化程序'插件吗?
PIL是否已经支持我定位的某些格式?如果不挖掘所有的源代码,我无法弄清楚PIL真正支持的格式。
或者是否有比PIL更好的库来实现这一目标?
任何提示将不胜感激。谢谢!
答案 0 :(得分:1)
将某些内容从8位改为5位是微不足道的。在8位中,该值在0到255之间,在5位中它在0到31之间,因此您需要做的就是将值除以8.或者在RGB565模式下为绿色的情况下为4。或者在RGBA4444模式下为16,因为它每通道使用4位等等。
编辑:再次阅读你的问题,我认为存在混淆(无论是我还是你)。 RGB555和RGBA4444等不是真正的格式,如GIF或JPG,它们是色彩空间。这种转变是微不足道的(见上文)。您想要在以后保存它的文件格式是另一个问题。大多数文件格式对色彩空间的支持有限。我认为例如JPEG总是将它保存在YCbCr中(但我可能会弄错),GIF使用调色板(我认为它总是RGB888)等。
答案 1 :(得分:1)
有一个名为Python Colormath的模块可以提供很多不同的转换。强烈推荐。
答案 2 :(得分:1)
Numpy确实很强大,但要到达那里并回到PIL需要两个内存副本。您是否尝试过以下方面的内容?
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)
还有一个名为Grapefruit的模块,可让您在很多颜色格式之间进行转换。
答案 4 :(得分:0)