Pillow 将 png 转换为 8bit 位图
Posted
技术标签:
【中文标题】Pillow 将 png 转换为 8bit 位图【英文标题】:Pillow convert png to 8bit bitmap 【发布时间】:2019-11-10 00:14:52 【问题描述】:我尝试将 8 位 PNG 转换为 8 位(256 索引调色板)位图图像, 但是枕头一直在吐,结果很糟糕。
这是我尝试过的。
image = Image.open(file)
image = image.convert('P')
pp = image.getpalette()
pp[0] = 255
pp[1] = 0
pp[2] = 255
image.putpalette(pp)
或
image = Image.open(file)
image = image.convert('P')
image.save(blabla.bmp)
这就是我期望看到的结果。 这是一个实际的位图(由 Photoshop 完成。) Photoshop 这就是枕头所做的: Pillow 这是什么玩笑?! 它甚至被剪掉了 我应该怎么做才能正确转换它?
原图:
【问题讨论】:
能否把原图贴出来,让我们测试一下? 哦,好的,谢谢 :) i.stack.imgur.com/G0g5q.png 【参考方案1】:你可以这样做:
from PIL import Image
# Open image
image = Image.open('feather.png')
# Quantize to 256 colours using fast octree method
result = image.quantize(colors=256, method=2)
【讨论】:
@MarkSetchell 很好的答案 (+1) 顺便说一句,您能否解释一下Image.quantize()
的工作方式有何不同,然后通过 convert("P")
将图像转换为 P
模式。其次,快速八叉树方法在这段代码中做了什么?我在quantize()
中运行了没有method = 2
参数的代码并得到了相同的结果。
@VasuDeo.S 您好 Vasu,对不起,我与 PIL 的作者没有联系,也没有了解他们为什么选择以任何特定方式做任何事情。我只是有一些使用 PIL/Pillow 的经验,这就是我学会获得最佳结果的方式。
我现在检查了你的方法,它只适用于 PNG,但是当我尝试保存为 'P' 类型位图时也会发生同样的问题。
我认为这是因为 Alpha 通道。 alpha 通道没有被顺利移除..以上是关于Pillow 将 png 转换为 8bit 位图的主要内容,如果未能解决你的问题,请参考以下文章
将大型光栅图形图像(位图、PNG、JPEG 等)转换为非矢量 postscript