Эффект наложения на изображение в Python Pillow ⇐ Python
-
Гость
Эффект наложения на изображение в Python Pillow
Я использую Python, чтобы получить эффект наложения на изображение при щелчке мыши. Как увеличить прозрачность цвета, чтобы основное изображение оставалось видимым. В настоящее время основное изображение скрывается под ним. Мне не удалось найти опцию управления непрозрачностью
импортировать tkinter как tk из диалога импорта файла tkinter из PIL импортировать изображение, ImageDraw, ImageTk класс ImageEditor: защита __init__(сам): self.root = tk.Tk() self.image = Нет self.grid = Нет self.colors = [(255, 0, 0), (255, 255, 0), (0, 0, 255)] # цвета RGB self.current_color_index = 0 self.display_image = Нет self.canvas = tk.Canvas(self.root) self.canvas.bind("", self.change_color) self.canvas.pack(side='left') self.load_btn = tk.Button(self.root, text='Load', команда=self.load_image) self.load_btn.pack(side='right') self.save_btn = tk.Button(self.root, text='Save', команда=self.save_image) self.save_btn.pack(side='right') self.root.mainloop() защита load_image (сам): img_path = filedialog.askopenfilename() self.image = Image.open(img_path).convert("RGB") # Преобразование в формат RGB self.grid = Image.new("RGBA", self.image.size, (0, 0, 0, 0)) # Создаём прозрачное наложенное изображение self.display_image = ImageTk.PhotoImage(self.image) self.canvas.config(ширина=self.image.width, высота=self.image.height) self.canvas.create_image(0, 0, image=self.display_image, якорь='nw') защита Change_color (я, событие): если self.image имеет значение None: возвращаться x, y = событие.x, событие.y # Определите область вокруг щелчка мыши (отрегулируйте по мере необходимости) регион = (х - 10, у - 10, х + 10, у + 10) рисовать = ImageDraw.Draw(self.grid) если self.current_color_index == 3: # Если это четвёртый клик, удалим цвет (сделаем область прозрачной) draw.rectangle(регион, fill=(0, 0, 0, 0)) еще: цвет = self.colors[self.current_color_index] draw.rectangle(регион, заливка=цвет) self.display_image = ImageTk.PhotoImage(Image.alpha_composite(self.image.convert("RGBA"), self.grid)) self.canvas.create_image(0, 0, image=self.display_image, якорь='nw') self.current_color_index = (self.current_color_index + 1) % 4 # Циклическое перебор 4 значений защита save_image (сам): если self.image имеет значение None: возвращаться file_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG File", "*.png")], Initialfile="output") если путь_файла: Final_image = Image.alpha_composite(self.image.convert("RGBA"), self.grid) Final_image.save(путь_к файлу, "PNG") если __name__ == "__main__": приложение = Редактор изображений()
Я использую Python, чтобы получить эффект наложения на изображение при щелчке мыши. Как увеличить прозрачность цвета, чтобы основное изображение оставалось видимым. В настоящее время основное изображение скрывается под ним. Мне не удалось найти опцию управления непрозрачностью
импортировать tkinter как tk из диалога импорта файла tkinter из PIL импортировать изображение, ImageDraw, ImageTk класс ImageEditor: защита __init__(сам): self.root = tk.Tk() self.image = Нет self.grid = Нет self.colors = [(255, 0, 0), (255, 255, 0), (0, 0, 255)] # цвета RGB self.current_color_index = 0 self.display_image = Нет self.canvas = tk.Canvas(self.root) self.canvas.bind("", self.change_color) self.canvas.pack(side='left') self.load_btn = tk.Button(self.root, text='Load', команда=self.load_image) self.load_btn.pack(side='right') self.save_btn = tk.Button(self.root, text='Save', команда=self.save_image) self.save_btn.pack(side='right') self.root.mainloop() защита load_image (сам): img_path = filedialog.askopenfilename() self.image = Image.open(img_path).convert("RGB") # Преобразование в формат RGB self.grid = Image.new("RGBA", self.image.size, (0, 0, 0, 0)) # Создаём прозрачное наложенное изображение self.display_image = ImageTk.PhotoImage(self.image) self.canvas.config(ширина=self.image.width, высота=self.image.height) self.canvas.create_image(0, 0, image=self.display_image, якорь='nw') защита Change_color (я, событие): если self.image имеет значение None: возвращаться x, y = событие.x, событие.y # Определите область вокруг щелчка мыши (отрегулируйте по мере необходимости) регион = (х - 10, у - 10, х + 10, у + 10) рисовать = ImageDraw.Draw(self.grid) если self.current_color_index == 3: # Если это четвёртый клик, удалим цвет (сделаем область прозрачной) draw.rectangle(регион, fill=(0, 0, 0, 0)) еще: цвет = self.colors[self.current_color_index] draw.rectangle(регион, заливка=цвет) self.display_image = ImageTk.PhotoImage(Image.alpha_composite(self.image.convert("RGBA"), self.grid)) self.canvas.create_image(0, 0, image=self.display_image, якорь='nw') self.current_color_index = (self.current_color_index + 1) % 4 # Циклическое перебор 4 значений защита save_image (сам): если self.image имеет значение None: возвращаться file_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG File", "*.png")], Initialfile="output") если путь_файла: Final_image = Image.alpha_composite(self.image.convert("RGBA"), self.grid) Final_image.save(путь_к файлу, "PNG") если __name__ == "__main__": приложение = Редактор изображений()
Мобильная версия