【问题标题】:PNG Image Quality in PILPIL 中的 PNG 图像质量
【发布时间】:2015-12-18 09:51:16
【问题描述】:

一直在尝试通过应用引擎将以下png文件上传到谷歌云存储:

在上传之前,我通过 PIL 运行它来处理任何图像旋转或背景颜色的变化等

但是,通过应用程序运行 PIL 操作时,我的图像质量非常差,即使在 python 命令行中运行相同的命令效果很好

有人有想法吗?

对于 PIL 命令,我只运行以下命令:

imtemp = Image.open('/[path]/logo.png')
size = max(imtemp.size[0],imtemp.size[1]) 
im = Image.new('RGBA', (size,size), (255,255,255,0))
im.paste(imtemp, ((size-imtemp.size[0])/2,(size-imtemp.size[1])/2)) 
imtemp = im 
im = Image.new('RGB', (size,size), '#FFFFFF') 
im.paste(imtemp, (0,0), imtemp) 
im.show()

尝试了以下,但仍然没有成功

    imtemp = Image.open(StringIO(imagedata)).convert("RGBA")
    im = Image.new("RGB", imtemp.size, "#FFFFFF")
    im.paste(imtemp, None, imtemp)
    imageoutput = StringIO()
    im.save(imageoutput, format="PNG", quality=85, optimize=True, progressive=True)
    imageoutput = imageoutput.getvalue()

【问题讨论】:

    标签: python image google-app-engine png python-imaging-library


    【解决方案1】:

    看起来您想拍摄一个调色板图像,可能带有透明像素,将其投影在白色背景上,然后制作一个质量调整大小的版本,大小只有原来的一半。

    您可以为此使用convert()thumbnail() 函数:

    from PIL import Image
    
    # Open the image and convert it to RGBA.
    orig = Image.open("fresh.png").convert("RGBA")
    
    # Paste it onto a white background.
    im = Image.new("RGB", orig.size, "#ffffff")
    im.paste(orig, None, orig)
    
    # Now a quality downsize.
    w, h = im.size
    im.thumbnail((w / 2, h / 2), Image.ANTIALIAS)
    im.show()    
    

    当然,如果您想要原始尺寸的图像,您可以留下thumbnail() 调用。

    【讨论】:

    • 尝试了您的解决方案,但它似乎仍然给出了相同的结果...从上面的代码编辑中有任何线索吗?
    • 不抱歉,您正在引入一个 StringIO 对象,您使用一些 imagedata 进行初始化(这是从哪里来的?)。下一步,创建一个白色背景并将透明图像粘贴在它上面对我来说似乎没问题,但后来我看到你将它保存到具有各种选项的 StringIO。你试过简单的im.save("output.png")吗?似乎您将许多子问题混淆为一个,例如打开图片,转换它,将其保存到某个地方。你突然使用所有这些StringIOs 有什么原因吗?
    • AppEngine 文件系统是只读的,因此写入缓冲区以保存在其他地方是典型的。
    • 是的,已经尝试过没有其他参数的基本保存,但结果是一样的。图像数据来自 webapp2 从表单文件输入中获取。我知道问题出在这个代码集中,因为我可以直接将图像数据上传到云存储并且图像质量很好所以在 StringIO 或 PIL 操作的某个地方,图像被降级 - 感觉就像是在转换为 RGB 期间?我仍然不完全确定这是如何工作的,但是否可以使用原始调色板保存文件......即一个好的测试可能只是打开然后保存图像而没有任何意外处理
    • @Dennis 如果您首先将图像下载到本地计算机并在那里进行处理会怎样?有区别吗?
    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多