【问题标题】:Pillow convert png to 8bit bitmapPillow 将 png 转换为 8bit 位图
【发布时间】: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 这是什么玩笑?! 它甚至被剪掉了 我应该怎么做才能正确转换它?

原图:

【问题讨论】:

标签: python-3.x bitmap png python-imaging-library 8-bit


【解决方案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 通道没有被顺利移除..
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2021-06-04
  • 2011-01-01
  • 2017-02-10
  • 2018-11-17
相关资源
最近更新 更多