首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pypng将24位PNG文件转换为8位彩色索引图像。

使用pypng将24位PNG文件转换为8位彩色索引图像。
EN

Stack Overflow用户
提问于 2020-05-22 13:22:48
回答 1查看 4.6K关注 0票数 1

我正在尝试编写一个python脚本,它接受标准的24位pngs,并将它们转换为8位pngs以获得更好的压缩。看起来pypng可以做到这一点,但我不太清楚如何使用它。图像处理对我来说是一个新的领域,所以这看起来很愚蠢。我现在有这样的情况:

代码语言:javascript
复制
r=png.Reader(<myfile>)
test = r.asRGBA8()

这给了我元组作为回报(我相信图像的层次)。然而,我似乎无法将它写回或保存回图像。我少了什么?这是一个测试图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 08:36:08

原始答案

我想这能满足你的要求:

代码语言:javascript
复制
from PIL import Image

# Load image
im = Image.open('logo.png')                                                                 

# Convert to palette mode and save
im.convert('P').save('result.png')

最新答案

因此,我找不到办法让PIL制作一个合理的调色板图像,但我可以用其他几种方法.

无论是使用像这样的wand

代码语言:javascript
复制
#!/usr/bin/env python3

from wand.image import Image

with Image(filename='logo.png') as img: 
    img.quantize(number_colors=256, colorspace_type='lab', treedepth=0, dither=False, measure_error=False)
    img.save(filename='result.png')

或者,在命令行向ImageMagick炮击,然后执行:

代码语言:javascript
复制
magick logo.png -colors 255 png8:logo8.png      # use "convert" in place of "magick" if using v6

最新答案

好的,我找到了一种让PIL/Pillow做得更好的方法,正如预期的那样,它使用了通常不内置到枕头中的libimagequant (至少在我所在的macOS上)。代码如下所示:

代码语言:javascript
复制
#!/usr/bin/env python3

from PIL import Image

# Load image
im = Image.open('logo.png')                                                                 

# Convert to palette mode and save. Method 3 is "libimagequant"
im.quantize(colors=256, method=3).save('result.png')

在macOS上使用libimagequant构建PIL/Pillow的步骤如下--它们在其他平台上会有所不同,但是您应该能够获得总体想法并进行调整:

代码语言:javascript
复制
pip uninstall pillow           # remove existing package
brew install libimagequant
brew install zlib
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"
pip install --upgrade Pillow --global-option="build_ext" --global-option="--enable-imagequant" --global-option="--enable-zlib"

关键词:Python,图像处理,PIL/枕头,libimagequant,macOS,quantise,quantize。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61956094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档