Я пытаюсь взять GIF с палитрой, содержащей один индекс прозрачности, и использовать Подушку для создания обрезанных суб-изображений. Однако при использовании метода crop() результаты уже не являются прозрачными.Поддержание прозрачности с помощью режима палитры GIF в подушке
original = Image.open("filename.gif")
print(original.mode) # prints "P", as it should
transparent = original.info["transparency"]
print(transparent) # prints the correct index of the transparent color
cropped = original.crop((0, 0, 10, 10))
print(cropped.info) # transparency no longer present
cropped.info["transparency"] = 255
print(cropped.info) # key is entered, but not transparent in a drawn image
Как я могу поддерживать или восстанавливать прозрачный индекс с помощью манипуляций в подушке? Как показано выше, даже если я «грубой силой», добавьте индекс прозрачности обратно в словарь «info», это, очевидно, не там, где Python ищет указанный индекс. В документации также упоминается, что некоторые методы, такие как crop(), ленивы и не передают всю информацию об изображении, так есть ли способ повторно добавить такую информацию к объекту изображения? Документация предполагает, что я могу сделать это, сохранив новый GIF-файл, но мне не понадобятся суб-изображения после завершения работы программы и их отображения.
отредактирован, чтобы добавить ниже дополнительную информацию:
Исходное изображение, сделанное в GIMP (круг красного цвета, отмечен как прозрачный цвет с помощью IrfanView)
Выход моего кода, с кругом возвращается к видимой красному
Моей всей программе здесь:
from tkinter import *
from tkinter import ttk
from PIL import Image
from PIL import ImageTk
class Main:
def __init__(self):
self.root = Tk()
self.background = Canvas(self.root)
self.background.grid(column=0,row=0)
self.Draw()
def Draw(self):
original = Image.open("Transparency_test.gif")
print(original.mode) # prints "P", as it should
transparent = original.info["transparency"]
print(transparent) # prints the correct index of the transparent color
cropped = original.crop((0, 0, 50, 50))
print(cropped.info) # transparency no longer present
test_uncropped = ImageTk.PhotoImage(image=original)
test_cropped = ImageTk.PhotoImage(image=cropped)
self.background.create_image((0,0), image=test_uncropped, anchor=NW)
self.background.create_image((100,0), image=test_cropped, anchor=NW)
self.root.mainloop()
instance = Main()
Можете ли вы разместить конкретный файл GIF, который используете? –
Привет Мичиэль. Я добавил изображение и код с его выходом. Изображение создается с использованием стандартной веб-палитры из 216 цветов, в частности, той, что предоставляется GIMP. – Taugosz