Saltar al contenido

Cómo usar Pillow, un tenedor de PIL

Visión general

En la última publicación estaba escribiendo sobre PIL, también conocida como Python Imaging Library, esta biblioteca se puede usar para manipular imágenes con bastante facilidad. PIL no ha experimentado ningún desarrollo desde 2009. Por lo tanto, los amables usuarios de este sitio sugirieron echar un vistazo a Pillow. Este artículo te dirá cómo usar Pillow.

¿Qué es la almohada?

Pillow es una bifurcación de PIL (Python Image Library), iniciada y mantenida por Alex Clark y Contributors. Se basó en el código PIL y luego evolucionó a una versión mejor, moderna y más amigable de PIL. Agrega soporte para abrir, manipular y guardar muchos formatos de archivo de imagen diferentes. Muchas cosas funcionan de la misma manera que el PIL original.

Descargar e instalar Pillow

Antes de empezar a utilizar la almohada, primero debemos descargarla e instalarla. Pillow está disponible para Windows, Mac OS X y Linux. La versión más reciente es “2.2.1” y es compatible con python 2.6 y superior. Para instalar Pillow en máquinas con Windows, puede usar easy_install:

easy_install Pillow

Para instalar Pillow en máquinas Linux, simplemente use:

sudo pip install Pillow

Para instalar Pillow en Mac OS X, primero tuve que instalar XCode y luego instalar los requisitos previos a través de Homebrew. Después de instalar Homebrew, ejecuté:

$ brew install libtiff libjpeg webp littlecms
$ sudo pip install Pillow

Por favor, avíseme si conoce una forma más fácil de hacer esto en Mac.

Verifique que Pillow esté instalado

Para verificar que Pillow esté instalado, abra una Terminal y escriba la siguiente línea:

$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import Image

Si el sistema regresa con un “>>>”, los módulos Pillow están instalados correctamente.

Formatos de archivo

Antes de comenzar a utilizar el módulo Pillow, mencionemos algunos de los tipos de archivo compatibles. BMP EPS GIF IM JPEG MSP PCX PNG PPM TIFF WebP ICO PSD PDF Algunos de los tipos de archivo, solo tiene la posibilidad de leer, y otros solo puede escribir. Para ver la lista completa de tipos de archivos admitidos y más información sobre ellos, consulte el manual de Pillow.

Cómo usar Pillow para manipular una imagen

Ya que vamos a trabajar con imágenes, primero descarguemos una. Si ya tiene una imagen para usar, continúe y omita este paso. En nuestro ejemplo usaremos una imagen de prueba estándar llamada “Lenna” o “Lena”. Esa imagen de prueba estándar se utiliza en muchos experimentos de procesamiento de imágenes. Solo vamos aquí y descarga la imagen. Si hace clic en la imagen, la guardará como una imagen de 512 × 512 px.

Usando almohada

Veamos los posibles usos de esta biblioteca. Las funciones básicas se encuentran en el módulo Imagen. Puede crear instancias de esta clase de varias formas, ya sea cargando imágenes desde archivos, procesando otras imágenes o creando imágenes desde cero. Importe los módulos de almohada que desee utilizar.

from PIL import Image

A continuación, puede acceder a las funciones como de costumbre, p. Ej.

myimage = Image.open(filename)
myimage.load()

Cargar una imagen

Para cargar una imagen desde su computadora, puede usar el método “abrir” para identificar el archivo, y luego cargar el archivo identificado usando myfile.load (). Una vez que la imagen está cargada, puede hacer varias cosas con ella. A menudo uso el bloque try / except cuando trato con archivos. Para cargar nuestra imagen usando try / except:

from PIL import Image, ImageFilter
try:
    original = Image.open("Lenna.png")
except:
    print "Unable to load image"

Cuando leemos archivos desde el disco usando la función open (), no es necesario que conozcamos el formato del archivo. La biblioteca determina automáticamente el formato en función del contenido del archivo. Ahora, cuando tenga un objeto Imagen, puede utilizar los atributos disponibles para examinar el archivo. Por ejemplo, si desea ver el tamaño de la imagen, puede llamar al atributo “formato”.

print "The size of the Image is: "
print(original.format, original.size, original.mode)

El atributo “tamaño” es una tupla de 2 que contiene el ancho y el alto (en píxeles). Los “modos” comunes son “L” para imágenes en escala de grises, “RGB” para imágenes en color verdadero y “CMYK” para imágenes de preimpresión. La salida de arriba debería darle esto:

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

The size of the Image is:
('PNG', (512, 512), 'RGB')

Desenfocar una imagen

Este ejemplo cargará una imagen del disco duro y la difuminará. [source]

# Import the modules
from PIL import Image, ImageFilter

try:
    # Load an image from the hard drive
    original = Image.open("Lenna.png")

    # Blur the image
    blurred = original.filter(ImageFilter.BLUR)

    # Display both images
    original.show()
    blurred.show()

    # save the new image
    blurred.save("blurred.png")

except:
    print "Unable to load image"


To display the image, we used the "show()" methods. If you don't see anything, you could try installing ImageMagick first and run the example again.

Crear miniaturas

Una cosa muy común es crear miniaturas para imágenes. Las miniaturas son versiones de tamaño reducido de imágenes, pero aún contienen todos los aspectos más importantes de una imagen.

from PIL import Image

size = (128, 128)
saved = "lenna.jpeg"

try:
    im =  Image.open("Lenna.png")
except:
    print "Unable to load image"

im.thumbnail(size)
im.save(saved)
im.show()

El resultado de nuestro programa, mostrando la miniatura:

Filtros en almohada

El módulo Almohada proporciona el siguiente conjunto de filtros de mejora de imagen predefinidos:

BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SMOOTH
SMOOTH_MORE
SHARPEN

En nuestro último ejemplo de hoy, mostraremos cómo puede aplicar el filtro de “contorno” a su imagen. El siguiente código tomará nuestra imagen y se aplicará

from PIL import Image, ImageFilter

im = Image.open("Lenna.png")
im = im.filter(ImageFilter.CONTOUR)

im.save("lenna" + ".jpg")
im.show()

Nuestra imagen con el filtro de “contorno” aplicado:

Disfruté probar Pillow, y escribiré más publicaciones al respecto en el futuro.

Más lectura

http://pillow.readthedocs.org/en/latest/handbook/tutorial.html

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.