Módulo Pillow Image
Image es el módulo central de la biblioteca Pillow, que proporciona las funciones básicas de procesamiento de imágenes.
A continuación se presentan los métodos más utilizados del módulo Image y sus descripciones de funciones:
| Método | Descripción | Ejemplo |
|---|---|---|
Image.open(fp, mode='r') |
Abrir y reconocer archivos de imagen | img = Image.open('image.jpg') |
Image.new(mode, size, color=0) |
Crear una nueva imagen | new_img = Image.new('RGB', (500, 500), 'blue') |
Image.save(fp, format=None, **params) |
Guardar imagen | img.save('output.png') |
Image.show(title=None, command=None) |
Mostrar imagen | img.show() |
Image.resize(size, resample=None, box=None) |
Ajustar tamaño de la imagen | img.resize((200, 200)) |
Image.rotate(angle, resample=0, expand=0) |
Rotar imagen | img.rotate(45) |
Image.crop(box=None) |
Recortar imagen | img.crop((100, 100, 400, 400)) |
Image.paste(im, box=None, mask=None) |
Pegar imagen | img.paste(logo, (50, 50)) |
Image.convert(mode, matrix=None, dither=None) |
Convertir modo de imagen | img.convert('L') |
Image.filter(filter) |
Aplicar filtro | img.filter(ImageFilter.BLUR) |
Image.copy() |
Copiar imagen | copy = img.copy() |
Image.thumbnail(size) |
Crear miniatura | img.thumbnail((100, 100)) |
Image.getpixel(xy) |
Obtener valor de píxel | pixel = img.getpixel((50, 50)) |
Image.putpixel(xy, value) |
Establecer valor de píxel | img.putpixel((50, 50), (255, 0, 0)) |
Image.split() |
Separar canales | r, g, b = img.split() |
Image.merge(mode, bands) |
Combinar canales | Image.merge('RGB', (r, g, b)) |
3. Propiedades comunes
Además de los métodos, los objetos Image tienen algunas propiedades importantes:
| Propiedad | Descripción | Ejemplo |
|---|---|---|
format |
Formato de imagen | print(img.format) |
size |
Dimensiones de la imagen (ancho, alto) | print(img.size) |
width |
Ancho de la imagen | print(img.width) |
height |
Alto de la imagen | print(img.height) |
mode |
Modo de imagen | print(img.mode) |
info |
Diccionario de información relacionada con la imagen | print(img.info) |
Ejemplo de aplicación práctica
Operaciones básicas de imágenes
Ejemplo
from PIL import Image
# Abrir imagen
img = Image.open('example.jpg')
# Mostrar información de la imagen
print(f"Formato: {img.format}, Tamaño: {img.size}, Modo: {img.mode}")
# Ajustar tamaño y guardar
resized_img = img.resize((300, 300))
resized_img.save('resized_example.jpg')
# Convertir a imagen en escala de grises
gray_img = img.convert('L')
gray_img.save('gray_example.jpg')
# Abrir imagen
img = Image.open('example.jpg')
# Mostrar información de la imagen
print(f"Formato: {img.format}, Tamaño: {img.size}, Modo: {img.mode}")
# Ajustar tamaño y guardar
resized_img = img.resize((300, 300))
resized_img.save('resized_example.jpg')
# Convertir a imagen en escala de grises
gray_img = img.convert('L')
gray_img.save('gray_example.jpg')
Procesamiento de imágenes
Ejemplo
from PIL import Image, ImageFilter
img = Image.open('example.jpg')
# Aplicar filtro de desenfoque
blurred = img.filter(ImageFilter.BLUR)
blurred.save('blurred.jpg')
# Aplicar filtro de contorno
contour = img.filter(ImageFilter.CONTOUR)
contour.save('contour.jpg')
# Rotar imagen
rotated = img.rotate(45, expand=True)
rotated.save('rotated.jpg')
img = Image.open('example.jpg')
# Aplicar filtro de desenfoque
blurred = img.filter(ImageFilter.BLUR)
blurred.save('blurred.jpg')
# Aplicar filtro de contorno
contour = img.filter(ImageFilter.CONTOUR)
contour.save('contour.jpg')
# Rotar imagen
rotated = img.rotate(45, expand=True)
rotated.save('rotated.jpg')
Funciones avanzadas
Composición de imágenes
Ejemplo
from PIL import Image
# Abrir dos imágenes
img1 = Image.open('background.jpg')
img2 = Image.open('foreground.png')
# Asegurarse de que ambas imágenes tengan el mismo tamaño
img2 = img2.resize(img1.size)
# Componer imagen (suponiendo que foreground.png tiene canal alfa)
composite = Image.alpha_composite(img1.convert('RGBA'), img2.convert('RGBA'))
composite.save('composite.png')
# Abrir dos imágenes
img1 = Image.open('background.jpg')
img2 = Image.open('foreground.png')
# Asegurarse de que ambas imágenes tengan el mismo tamaño
img2 = img2.resize(img1.size)
# Componer imagen (suponiendo que foreground.png tiene canal alfa)
composite = Image.alpha_composite(img1.convert('RGBA'), img2.convert('RGBA'))
composite.save('composite.png')
Procesamiento por lotes
Ejemplo
import os
from PIL import Image
input_dir = 'input_images/'
output_dir = 'output_images/'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith('.jpg'):
img = Image.open(os.path.join(input_dir, filename))
# Convertir a escala de grises y guardar
gray_img = img.convert('L')
gray_img.save(os.path.join(output_dir, f"gray_{filename}"))
from PIL import Image
input_dir = 'input_images/'
output_dir = 'output_images/'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith('.jpg'):
img = Image.open(os.path.join(input_dir, filename))
# Convertir a escala de grises y guardar
gray_img = img.convert('L')
gray_img.save(os.path.join(output_dir, f"gray_{filename}"))