Académique Documents
Professionnel Documents
Culture Documents
Los formatos de las imágenes que se pueden procesar con Pillow son los de uso más extendido
(BMP, EPS, GIF, IM, JPEG, MSP, PCX, PNG, TIFF, PPM, WebP, ICO, PSD, PDF, etc). Los tipos de
imágenes dependen sobre todo del número de bits que se utilizan para representar la unidad de
información de una imagen o píxel.
P 8-bit por píxel, asignada a cualquier otro modo usando una paleta de colores
RGBA 4x8-bit por píxel, color verdadero con true color con máscara de transparencia
Formato:
print(imagen.format) # JPEG
Tamaño:
El módulo PIL utiliza un sistema en la que la coordenada (0, 0) se encuentra en la esquina superior
izquierda de la imagen. Si una imagen tiene un tamaño de 800x600 píxeles la coordenada (800, 600)
se encontrará en la esquina inferior derecha de la imagen.
Tipo de imagen:
Histograma:
El histograma de una imagen representa la frecuencia relativa de los niveles de gris o de los colores
básicos (rojo, azul, verde) de la imagen.
Una de las técnicas básicas de retoque de fotos consiste en modificar el histograma para aumentar
el contraste de las imágenes.
Otros métodos para consultar información de una imagen: imagen.info, imagen.palette.
La región a obtener se define con una tupla con las coordenadas siguientes:(izquierda, superior,
derecha, inferior)
Podemos cambiar el tamaño de una imagen para hacerla más grande o más pequeña. En este caso
como la imagen original tiene una proporción de 4x3 vamos a reducirla manteniendo estas
proporciones. Como la imagen original tiene un tamaño de 800x600 para hacerla 4 veces más
pequeña indicamos el nuevo tamaño 400x300 en la función resize().
# Mostrar imagen
reducida.show()
Para rotar una imagen utilizaremos el método rotate() y tendremos que indicar el número de grados
teniendo en cuenta que el giro seguirá el sentido contrario a las agujas del reloj. En el ejemplo
siguiente la imagen obtenida (a partir de "reducida.jpg") estará girada 45 grados.
# Mostrar imagen
girada1.show()
Otra posibilidad para rotar una imagen es con el método transpose(). El módulo Image provee
funciones para girar una imagen con rotaciones de grados múltiples de 90 (ROTATE_90,
ROTATE_180, ROTATE_270) y otras que permiten darles la vuelta (FLIP_LEFT_RIGHT,
FLIP_TOP_BOTTOM).
Unir imágenes:
La función paste() la podemos utilizar para unir varias imágenes en una. En el siguiente ejemplo se
utiliza el método new() para crear una imagen vacía "RGB" con un tamaño de 800x600 píxeles y con
el fondo negro. Después se abren dos imágenes con el mismo tamaño 400x600 y se pegan
horizontalmente, una a continuación de la otra, sobre la primera.
final = Image.new("RGB",(800,600),"black")
imagen1 = Image.open("nevando2-izq.jpg")
imagen2 = Image.open("nevando2-der.jpg")
final.paste(imagen1, (0,0))
final.paste(imagen2, (399,0))
final.show()
final.save("nevando2-unidas.jpg")
Si utilizamos dos imágenes transparentes del mismo tamaño y pegamos una en la coordenada (0,
0) de la otra obtentrámos una imagen mezclada.
Crear miniaturas:
imagen = Image.open("amapolas.jpg")
miniatura = (160, 120)
imagen.thumbnail(miniatura)
imagen.save("miniatura.jpg")
imagen = Image.open("amapolasrgb.jpg")
#imagen.mode -> RGB
imagenbn = imagen.convert("L")
imagenbn.show()
imagenbn.save("amapolasbn.jpg")
Filtros
Para aplicar con Pillow un filtro a una imagen se utiliza el módulo ImageFilter.
Debemos tener en cuenta que, a veces, cuando se aplica un filtro los cambios a observar serán más
o menos sutiles en función al tipo de imagen que procesemos.
contorneada = imagen.filter(ImageFilter.CONTOUR)
contorneada.show()
contorneada.save("contorneada.jpg")
DETAIL: Resaltar detalle:
detallar = imagen.filter(ImageFilter.DETAIL)
detallar.show()
detallar.save("detallada.jpg")
realzarbordes = imagen.filter(ImageFilter.EDGE_ENHANCE_MORE)
realzarbordes.show()
realzarbordes.save("realzarbordes.jpg")
relieve = imagen.filter(ImageFilter.EMBOSS)
relieve.show()
relieve.save("relieve.jpg")
limites = imagen.filter(ImageFilter.FIND_EDGES)
limites.show()
limites.save("limites.jpg")
suavizar = imagen.filter(ImageFilter.SMOOTH_MORE)
suavizar.show()
suavizar.save("suavizar.jpg")