【发布时间】:2018-03-31 20:30:21
【问题描述】:
我的问题:
只要我将输入的 GIF 图像转换为 RGBA 进行处理,我就会享受图像的质量损失。 (您可以在代码下方看到两张图片)
下面显示的代码“works”只是我不知道,为什么我会失去质量。 有什么建议吗??
我的代码:
from PIL import ImageTk, Image as Im
from Tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.root.geometry('1171x900')
self.maskPng = Im.open("Images/mask.gif")
self.maskPng = self.maskPng.convert("RGBA")
self.mask = ImageTk.PhotoImage(self.maskPng)
self.show = Canvas(self.root, width = 1170, height = 780)
self.show.pack()
self.show.create_image(0, 0, image = self.mask, anchor = NW)
self.speedBTN = Button(self.root, text = "hello", command = self.speed).pack(side = "right")
self.changed = False
def speed(self):
self.speedImg = Im.open("Images/speed/3_1.gif")
self.speedImg = self.speedImg.convert("RGBA")
self.maskPng.paste(self.speedImg, (0,0), self.speedImg)
self.maskPng.save("Images/speed/test.gif", "GIF")
self.render()
def render(self):
self.mask = ImageTk.PhotoImage(Im.open('Images/speed/test.gif'))
self.show.create_image(0,0, image = self.mask, anchor = NW)
self.show.image = self.mask
def draw(self):
self.root.mainloop()
main = App()
main.root.mainloop()
图片:
这是我的面具.gif:
这是我的 3_1.gif:
(stackoverflow 上的白色在 gif 中是透明的)
这是颗粒状、令人痛心的结果:
(我用红色矩形标记了最“颗粒状”的区域)
感谢您的帮助! :)
【问题讨论】:
-
我猜这个问题与颜色的数量有关。 GIF 可以使用索引颜色。在您的图像中,有很多微妙不同的灰色阴影,而颜色的阴影并不多,所以这是一个很好的匹配。然而,RGBA 将其支持的颜色均匀分布在整个色彩空间中。您可能会看到是否有可用的替代配色方案在您需要的区域中具有更高的保真度(或者总体上更保真!)。我对PIL的图像处理一无所知,所以无法提出具体的解决方案。
-
您再次将图像另存为 GIF,这将重新计算调色板。出现伪像是因为修改稍微改变了颜色权重(或者 PIL 的颜色下采样算法可能不同,以至于总是以这种方式改变它)。尝试另存为 24 位彩色图像 - 问题会消失吗?我不知道 PIL 是否允许在不触摸调色板的情况下修改索引图像。
标签: python image-processing python-imaging-library