Converta o formato de fotos com Python

Na era das redes sociais, a necessidade de manipularmos fotos é constante. Além de alterações sofisticadas, também precisamos realizar operações simples, como a conversão de um formato de foto para outro. Por exemplo, a conversão de arquivos PNG para JPEG (equivalente a JPG) é uma necessidade comum quando precisamos reduzir o tamanho das imagens em bytes. E, é claro, o Python é um ótimo aliado nessas horas. Neste post, abordaremos como é fácil converter fotos e outras imagens usando Python.
Bibliotecas
pip install Pillow
pip install opencv-python
conversão de fotos com Pillow
Converter fotos e imagens com Pillow é literalmente brincadeira de criança. Veja o código ridiculamente simples abaixo:
from PIL import Image # importa Image
# Converte foto de PNG para JPG
# abre imagem/foto
img = Image.open('minha_foto.png') # substitua pelo local correto de sua foto
# Salva foto no novo formato mudando sua extensão
img.save('minha_foto_convertida.jpg')
Neste código, apenas importamos a classe Image do Pillow (PIL). Depois, especificamos o local da imagem que desejamos converter (especifique o seu local corretamente). Após isso, basta abrir a imagem com Pillow e salvá-la com a extensão desejada. No código acima, convertemos uma imagem PNG para JPG. Abaixo, fazemos a conversão contrária:
# Converte foto de JPG para PNG
# abre imagem/foto
img = Image.open('minha_foto.jpg') # substitua pelo local correto de sua foto
# Salva foto no novo formato mudando sua extensão
img.save('minha_foto_convertida.png')
Conversão de fotos com OpenCV
A conversão de formato de fotos com OpenCV é tão fácil quanto com Pillow. Até a estrutura do código é a mesma! A única diferença está no nome dos comandos usados (ao invés de Image.open() e Image.save(), usamos cv2.imread() e cv2.imwrite()):
import cv2 # importa OpenCV
# abre imagem/foto com OpenCV
img = cv2.imread('minha_foto.png') # substitua pelo local correto de sua foto
# Salva foto no novo formato mudando sua extensão, note que o comando precisa de nome e imagem como argumentos
cv2.imwrite('minha_foto_convertida.jpg', img)
Neste código, repetimos o procedimento anterior. Importamos a biblioteca (cv2), abrimos a imagem que queremos converter com OpenCV e a salvamos com o formato desejado. A única diferença mais importante entre os dois códigos está na última linha (salvamento). O OpenCV requer que especifiquemos o nome da nova imagem e a imagem em questão.
Conversão em série
Geralmente, não queremos converter apenas uma imagem, mas várias. Python também realiza esse tipo de operação sem dificuldades com a ajuda do módulo os. Veja um exemplo abaixo de como você pode realizar essa operação em poucos segundos:
import os
from PIL import Image
# define o diretório de origem com suas imagens originais
dir_origem = 'especifique_seu_diretório_de_origem'
# define o diretório de destino para salvar as imagens convertidas
dir_destino = 'especifique_seu_diretório_de_destino'
minhas_fotos = os.listdir(dir_origem) # cria lista com as fotos do diretório de origem
# loop para converter fotos uma a uma
for foto in minhas_fotos:
img = Image.open(os.path.join(dir_origem, foto)) # abre uma foto da pasta
# para criar novo nome, usamos split() para separar apenas o nome original sem sua extensão
nome_nova_imagem = foto.split('.')[0]
# usa nome separado acima para criar o local completo para o salvamento da nova imagem
nova_img = os.path.join(dir_destino, nome_nova_imagem +'_convertida.jpg') # a extensão definida aqui muda o formato da imagem
# salva foto convertida no diretório de destino
img.save(nova_img)
Neste exemplo, usamos o módulo os para acessar um diretório de origem com nossas fotos e também um diretório de destino onde armazenaremos as fotos convertidas. Depois, criamos uma lista das nossas fotos originais com os.listdir(). Em seguida, usamos um loop para abrir uma foto de cada vez, renomeá-la com a extensão desejada e salvá-la na pasta de destino. Neste trecho, usamos PIL para executar a conversão, mas você pode usar OpenCV se essa for a sua preferência! Para isso, apenas altere o pacote importado e as linhas 14 e 23 com os comandos corretos do OpenCV mostrados anteriormente.