1. Identificando o formato da imagem
Formatos de imagem suportados
O Pillow suporta muitos formatos de imagem, incluindo:
- JPEG (JPG): Um dos formatos mais populares para fotos. Comprime a imagem com perda de qualidade, mas reduz significativamente o tamanho do arquivo. Não suporta transparência.
- PNG: Formato sem perdas que suporta transparência (canal alfa). Ideal para logos, ícones e imagens onde a clareza é importante.
- BMP: Formato de alta qualidade sem compactação, mas com tamanho grande de arquivo. Suporta transparência.
- TIFF: Popular para armazenar imagens sem perdas. Geralmente usado em impressão.
- WEBP: Formato moderno com alto nível de compressão e suporte a transparência. Adequado para imagens web, pois oferece um tamanho de arquivo menor com boa qualidade.
Carregando uma imagem para conversão
Antes de converter uma imagem, ela precisa ser carregada usando o método Image.open()
.
from PIL import Image
# Abrindo uma imagem
image = Image.open("example.jpg")
print(image.format) # Verifica o formato original da imagem
2. Convertendo uma imagem para outro formato
O método save()
permite salvar imagens em diferentes formatos, apenas alterando a extensão do nome do arquivo ou especificando o formato explicitamente.
Convertendo JPEG para PNG
Para converter uma imagem de JPEG para PNG, basta especificar a nova extensão ao salvar o arquivo:
# Salvando uma imagem no formato PNG
image.save("example_converted.png")
Esse código converte a imagem do formato JPEG para PNG, salvando com o nome especificado. PNG é excelente para salvar imagens sem perdas e também suporta áreas transparentes.
Convertendo PNG para JPEG
Converter uma imagem de PNG para JPEG também é possível, mas é importante lembrar que JPEG não suporta transparência. Durante a conversão, áreas transparentes serão preenchidas com branco.
# Convertendo PNG para JPEG (transparência será substituída por fundo branco)
image = image.convert("RGB") # Alterando para o modo RGB, necessário para JPEG
image.save("example_converted.jpg", "JPEG")
O método convert("RGB")
é usado para converter a imagem para o modo RGB, pois o JPEG não suporta áreas transparentes. Isso é necessário para salvar o arquivo no formato JPEG.
3. Gerenciando a qualidade da imagem
Para otimizar imagens, o Pillow oferece os parâmetros quality
e optimize
, que permitem controlar a qualidade e o tamanho do arquivo. Esses parâmetros são especialmente úteis para JPEG e PNG.
Otimização e gerenciamento de qualidade no JPEG
Ao salvar uma imagem em formato JPEG, o parâmetro quality
regula o grau de compressão. Quanto maior o valor da qualidade, maior será o tamanho do arquivo e a qualidade da imagem. O valor de quality
varia de 1 a 95 (o padrão é 75).
# Salvando uma imagem JPEG com qualidade reduzida
image.save("example_compressed.jpg", "JPEG", quality=85)
Este código salva a imagem com qualidade 85, o que normalmente mantém uma boa qualidade ao mesmo tempo que reduz o tamanho do arquivo. Se precisar de menor qualidade, por exemplo, para criar miniaturas, você pode especificar quality = 50
.
Otimização de PNG
Para PNG, o parâmetro optimize = True
realiza compressão sem perdas, removendo dados redundantes. Isso é especialmente útil para publicar imagens na internet.
# Salvando um PNG otimizado
image.save("example_optimized.png", "PNG", optimize=True)
A otimização de PNG ajuda a reduzir o tamanho do arquivo sem perda de qualidade, o que é especialmente importante para logos e ícones, onde cada kilobyte pode fazer a diferença.
Comparando a qualidade JPEG com diferentes níveis de compressão
Vamos ver como a alteração do parâmetro quality
afeta o tamanho do arquivo e a qualidade da imagem.
# Salvando a imagem JPEG com diferentes qualidades
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
Neste exemplo, salvamos a mesma imagem com três níveis de qualidade: 95, 75 e 50. A imagem com qualidade 95 será praticamente indistinguível do original, mas ocupará mais espaço, enquanto a qualidade 50 resultará em compressão significativa e, possivelmente, perda visível de detalhes.
4. Usando o formato WebP
O formato WebP é um formato moderno que suporta compressão tanto com perdas quanto sem perdas, além de transparência. Ele é amplamente usado na internet devido ao alto nível de compressão.
Convertendo uma imagem para o formato WebP
# Convertendo uma imagem para WebP
image.save("example.webp", "WEBP", quality=80)
Neste exemplo, salvamos a imagem no formato WebP com qualidade 80. O WebP permite um tamanho de arquivo significativamente menor em comparação com JPEG ou PNG, mantendo uma qualidade similar.
Exemplo de conversão completa com otimização
Agora vamos combinar todos os métodos apresentados e criar um script para converter uma imagem em vários formatos com otimização.
from PIL import Image
# Abrindo uma imagem
image = Image.open("example.jpg")
# Convertendo para PNG com otimização
image.save("converted_optimized.png", "PNG", optimize=True)
# Convertendo para JPEG com qualidade reduzida
image_rgb = image.convert("RGB") # Alterando para o modo RGB para JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# Convertendo para WebP com qualidade otimizada
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
Neste exemplo:
- Convertimos a imagem para PNG com otimização, o que ajuda a reduzir o tamanho do arquivo sem perdas.
- Salvamos a imagem no formato JPEG com qualidade 85, garantindo boa qualidade e tamanho de arquivo menor.
- Convertimos a imagem para o formato WebP, ideal para publicação na internet, mantendo alta qualidade com tamanho reduzido de arquivo.
GO TO FULL VERSION