Olá pessoal, neste tutorial, iremos criar um compressor de imagem em python.
O aplicativo nos permitirá redimensionar o tamanho de uma imagem sem perder qualidade, e esse aplicativo pode ser muito útil para pessoas que desejam alterar a largura e a altura de uma imagem sem perder a qualidade da imagem.
E, como sempre, vou criar esse aplicativo para aprimorar nosso conhecimento e trabalhar com python.
Aqui vamos usar o Tkinter para a parte gráfica ou melhor para o front-end.
Criando a Interface gráfica (front-end)
Exatamente como havia dito usaremos o Tkinter para a parte visual:
Crie um novo ficheiro em python e nomeia-o como bem entenderes, o meu eu nomeiarei de imagen.py e salve o usando a extensão de ficheiro python
Em seguida, importe a biblioteca tkinter e crie uma janela vazia com tkinter. Eu defini algumas cores que usarei neste projeto.
from tkinter import *
################# definir algumas cores ###############
co0 = "#000000" # black
co1 = "#59656F"
co2 = "#feffff" # white
co3 = "#0074eb" # blue
co5 = "#59b356" # green
###### criar a janela principal do aplicativo ######
janela = Tk()
# para evitar que o tamanho da janela seja alterado
janela.resizable(width=FALSE, height=FALSE)
janela.geometry('400x250')
janela.title('Compressor de imagem')
janela.configure(background=co2)
janela.mainloop()
Em seguida, criaremos um frame onde iremos colocar o label que irá mostrar o nome da nossa aplicação, e este frame será colocada na janela principal da nossa aplicação.
A idéia é dividir e colocar todos os novos itens dentro deste frame para podermos ter um controle melhor da nossa arquitetura.
Aqui, usaremos o gerente de posição de grid, com o qual é mais fácil obter o resultado que queremos alcançar.
############ criando um frame ###########
framecima = Frame(janela, width=400, height=250, bg=co2, relief="flat",)
framecima.grid(row=0, column=0, sticky=NSEW)
#########adicionando um label que será exibido o nome do aplicativo #######
app_name = Label(framecima,text="Compressor de imagem",width=24, height=1, pady=7,padx=10,relief="flat",anchor=CENTER,font=('Courier 20 bold'),bg=co2, fg=co0)
app_name.grid(row=0, column=0, columnspan=2, sticky=NSEW, pady=1)
Em seguida, criaremos um um botão que nos permitirá adicionarmos a imagem que desejamos converter.
############# criar botão para o novo arquivo ##############
b_novo = Button(framecima, text="+ Novo", width=10, height=1, bg=co3,fg="white", font="5", anchor="center", relief=RAISED)
b_novo.grid(row=1, column=0, columnspan=2, sticky=NSEW, pady=1)
Temos tudo certo até aqui, agora iremos criar duas caixas de entrada para inserir os valores desejados de altura e largura, e também iremos adicionar alguns labels por cima deles e juntamente com um botão que irá performar acção desejada.
############ Criando alguns Labes ##############
nova_altura = Label(framecima, text="Digite nova altura", width=10, height=1, pady=7,
padx=10, relief="flat", anchor=CENTER, font=('Courier 9 bold'), bg=co2, fg=co0)
nova_altura.grid(row=3, column=0, sticky=NSEW, pady=5)
nova_largura = Label(framecima, text="Digite nova largura", width=10, height=1, pady=7,padx=10, relief="flat", anchor=CENTER, font=('Courier 9 bold'), bg=co2, fg=co0)
nova_largura.grid(row=3, column=1, sticky=NSEW, pady=5)
entrada_altura = Entry(framecima, width=9, justify='center')
entrada_altura.grid(row=4, column=0, sticky=NSEW, pady=5)
entrada_largura = Entry(framecima, width=9, justify='center')
entrada_largura.grid(row=4, column=1, sticky=NSEW, pady=5)
################# Botão Converter ##############
button_convert = Button(framecima, text="Converter", width=10, height=1, bg=co5,
fg="white", font="5", anchor="center", relief=RAISED)
button_convert.grid(row=5, column=0, columnspan=2, pady=5)
Até agora, temos tudo certo e nossa interface gráfica já está completa.
Agora vamos instalar a biblioteca Pillow
Pillow é uma biblioteca adicional gratuita e de código aberto para a linguagem de programação Python que adiciona suporte para abrir, manipular e salvar muitos formatos diferentes de arquivos de imagem. Está disponível para Windows, Mac OS X e Linux.
Vai no seu terminal e instale e digita: pip install Pillow e a biblioteca pillow será instalada.
Depois de instalar a biblioteca pillow, vamos importar mais uma funcionalidade do tkinter que nos permite abrir arquivos, assim teremos:
from tkinter.filedialog import *
E também importa o pillow
from PIL import Image
Depois disso, vamos pegar nossa imagem que queremos converter, escrevendo o seguinte:
#Abre uma imagem
ficheiro = askopenfilename()
img = Image.open(ficheiro)
#Tamanho da imagem em pixels (tamanho da imagem original)
img_altura, img_largura = img.size
Se você salvar e executar esse código, ele solicitará que você escolha um arquivo.
Para evitar que o código seja executado sozinho, sem que o desejemos, colocaremos esse código dentro de uma função.
Iremos criar uma função e chamaremos ela de novoArquivo.
# para abrir um novo arquivo
def novoArquivo():
# Abre uma imagem
ficheiro = askopenfilename()
img = Image.open(ficheiro)
# Tamanho da imagem em pixels (tamanho da imagem original)
img_altura, img_largura = img.size
As variáveis img_altura, img_largura contém o tamanho de altura e largura original da imagem anterior, e nós gostaríamos que elas sejam apresentadas na nossa tela depois de termos selecionado o arquivo, então teremos:
Iremos criar um Label, e depois iremos passar os valores nele.
tamanho_antigo = Label(framecima, text="A altura e largura antigas eram " + str(img_altura) + "x" + str(img_largura), width=24, height=1, pady=7,padx=10, relief="flat", anchor=CENTER, font=('Courier 13 bold'), bg=co2, fg=co3)
tamanho_antigo.grid(row=2, column=0, columnspan=2, sticky=NSEW, pady=1)
Agora, se executarmos nosso script, ele não nos pedirá mais para escolher um arquivo.
Agora queremos que, quando ele executar o script, a opção de entrada de altura e largura, bem como a conversão do botão, não seja apresentada, porque não faz sentido que eles apareçam sem que tenhamos previamente selecionado um arquivo a ser convertido, Para isso , vamos simplesmente passar também eles dentro da função que acabamos de criar.
Até agora, nosso aplicativo está funcionando da maneira que queremos. para selecionar o arquivo que desejamos, passaremos a função que acabamos de criar, na forma de um evento para este botão, e sempre que você clicar nesse botão, ele solicitará que você selecione um arquivo. e depois salvamos e executamos o script.
Agora que obtivemos nossa imagem, precisamos apenas convertê-la para a altura e o tamanho desejados. Para isso, usaremos recursos da biblioteca Pillow, que serão assim:
# função para converter
def converter():
# obtendo os valores das entradas de altura e largura
altura = int(entrada_altura.get())
largura = int(entrada_largura.get())
# Definindo novas dimensões para a imagem
novo_tamanho = (altura, largura)
nova_img = img.resize((novo_tamanho), Image.ANTIALIAS)
img_salvar = asksaveasfilename()
nova_img.save(img_salvar + ".JPG")
Agora que terminamos de escrever nosso script que faz essa conversão, passaremos essa função para o botão converter e, toda vez que clicarmos nele, ele realizará a conversão da imagem e solicitará que a imagem seja salva em um local e nosso aplicativo estará pronto.
E gostaríamos também que, após a conversa, ela retorne ao estado inicial; para isso, simplesmente destruiremos todos os widgets presentes nesse quadro, portanto teremos.
Além disso, gostaríamos que, após a conversa, o aplicativo nos notifique que a conversa terminou, para isso usaremos os recursos do tkinter de mensagens que serão.
Nosso aplicativo está finalmente concluído.
0 Comentários