Essa é uma implementação um editor de imagens com várias funcionalidades, incluindo abrir, salvar, aplicar transformações e filtros em imagens. Vou dividir a modelagem do código em várias seções para facilitar a compreensão:
O código começa importando as bibliotecas necessárias:
import customtkinter as ctk
from PIL import Image, ImageEnhance
import numpy as np
import cv2
import matplotlib.pyplot as pltcustomtkinteré uma biblioteca personalizada para criar interfaces gráficas.PIL(Pillow) é uma biblioteca para manipulação de imagens.numpyé uma biblioteca para operações numéricas em arrays multidimensionais.cv2é a biblioteca OpenCV para processamento de imagens.matplotlib.pyploté usado para plotar gráficos.
É definida uma classe chamada App, que herda de ctk.CTk, que é a classe base para a interface gráfica. A classe App é a principal do programa e contém todos os métodos e funcionalidades.
O construtor da classe App é chamado __init__ e é responsável por inicializar a interface gráfica e configurar a janela principal. Aqui estão algumas das principais ações realizadas no método __init__:
- Chama o construtor da classe pai
ctk.CTkusandosuper().__init__(). - Inicializa várias variáveis de instância para armazenar diferentes versões da imagem.
- Define a variável de instância
zoompara controlar o zoom na imagem. - Configura o tema de cores padrão da interface gráfica.
- Define o título da janela principal como "EDITOR DE IMAGENS".
- Define o tamanho mínimo da janela principal para 800x600 pixels.
- Configura o layout da janela principal usando
grid_columnconfigureegrid_rowconfigure.
Este método é chamado quando o usuário deseja abrir uma imagem. Ele exibe um diálogo de seleção de arquivo para o usuário escolher uma imagem. Algumas das principais ações realizadas neste método incluem:
- Usando o
ctk.filedialog, solicita ao usuário que selecione uma imagem. - Se uma imagem for selecionada, as variáveis de imagem existentes são limpas.
- A imagem selecionada é carregada e exibida no frame da imagem usando a biblioteca
Pillow. - A imagem original é armazenada na variável de instância
imagem_original.
Este método atualiza a imagem exibida no frame da imagem com uma nova imagem. Ele recebe uma imagem como entrada e a exibe no frame.
Esses métodos são chamados quando o usuário clica nos botões "Desfazer" e "Refazer" no menu. Eles restauram a imagem original ou a imagem modificada, respectivamente.
Este método permite ao usuário salvar a imagem modificada. Ele exibe um diálogo de seleção de arquivo para escolher onde salvar a imagem. A imagem é salva com base no formato original, se disponível.
Esses métodos são usados para aplicar várias transformações à imagem. Eles incluem ações como ajustar o brilho, contraste, gama, equalização e especificação do histograma. Cada método inclui a lógica para aplicar a transformação à imagem atual e atualizar a exibição.
Esses métodos permitem ao usuário aumentar ou diminuir o zoom na imagem. Eles alteram a variável de instância zoom e chamam o método aplica_zoom para atualizar a exibição da imagem com o novo zoom.
Esses métodos permitem alternar entre diferentes telas da interface gráfica, ou seja, o menu principal, a tela de transformações e a tela de filtros. Eles usam a função grid_forget() para esconder um frame e mostrar outro.
Esses métodos são usados para aplicar vários filtros à imagem. Eles incluem a lógica para aplicar o filtro à imagem atual e atualizar a exibição.
O código implementa um editor de imagens com funcionalidades básicas de abrir, salvar e aplicar transformações e filtros. A interface gráfica é construída usando a biblioteca customtkinter, e as operações de processamento de imagens são realizadas com a ajuda das bibliotecas Pillow e OpenCV.
O código é modular e bem organizado, com métodos separados para diferentes funcionalidades, tornando-o fácil de entender e manter.