首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >png24到png8转换

png24到png8转换
EN

Stack Overflow用户
提问于 2010-07-07 14:03:08
回答 3查看 5.4K关注 0票数 2

我想把输入的24位PNG图像转换成8位,我试过使用Imagemagick和Python,两者都不起作用。

例如:

在Imagemagick,我尝试将控制台命令转换为这样:

代码语言:javascript
运行
复制
convert -depth 8 png24image.png png8image.png

下面是我尝试用python的方式:

代码语言:javascript
运行
复制
import Image
def convert_8bit(src, dest):
    """
    convert_8bit: String, String -> void.
    Converts the input image file into 8bit depth.
    """
    im = Image.open(src)
    if not im.mode == "P":
        im2 = im.convert("P", rgb2xyz)
        im2.save(dest)

Imagemagick甚至不触及图像,而python函数则减少到8位,但保留唯一的编号164而不是256。当从24位png图像转换为png8时,Photoshop用于将图像转换为具有256唯一数字的8位。

谢谢

编辑:

通过Photoshop (我需要) alt文本http://img695.imageshack.us/img695/934/psout.png实现24->8 png转换的输出

通过我的Python函数转换的

alt文本http://img638.imageshack.us/img638/6762/pythonout.png

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-07 15:19:01

看起来,convert方法上的量化方法没有做正确的事情。试试这个:

代码语言:javascript
运行
复制
im2 = im.convert('RGB').convert('P', palette=Image.ADAPTIVE)

RGB的额外转换可能是多余的。我从http://nadiana.com/pil-tips-converting-png-gif那里得到了这个提示

票数 4
EN

Stack Overflow用户

发布于 2010-07-07 14:16:52

我这样做(在PHP中使用Imagick ):

代码语言:javascript
运行
复制
$colors = min(255, $im->getImageColors());
$im->quantizeImage($colors, Imagick::COLORSPACE_RGB, 0, false, false );
$im->setImageDepth(8 /* bits */);
票数 0
EN

Stack Overflow用户

发布于 2013-11-04 22:19:03

ImageMagick和PIL有低质量PNG8支撑

为了获得最佳的质量/文件大小比(以及完全支持作为奖励),请使用pngquant2

代码语言:javascript
运行
复制
pngquant *.png
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3195509

复制
相关文章

相似问题

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