Introducción al uso de la biblioteca Python Pillow (PIL)

Introducción al uso de la biblioteca Python Pillow (PIL)

La biblioteca Pillow es una biblioteca de terceros para Python.

En Python2, PIL (Python Imaging Library) es una biblioteca de procesamiento de imágenes muy útil, pero PIL no es compatible con Python3, por lo que algunas personas (Alex Clark y colaboradores) proporcionaron Pillow, que se puede usar en Python3.

Ruta del documento oficial: https://pillow.readthedocs.io/en/latest/

Uno, instale la almohada

pip install pillow

Una vez que la biblioteca de Pillow se haya instalado correctamente, se debe utilizar PIL para importar el paquete, pero no Pillow o Pillow.

import PIL
from PIL import Image

En la biblioteca de Pillow, además de más de veinte módulos, también admite muchos complementos. Uno de los más utilizados es la clase Imagen del mismo nombre en el módulo Imagen. Muchos otros módulos realizan un procesamiento especial adicional de imágenes sobre la base del módulo Imagen. El módulo Imagen importará algunas partes para su uso. Este artículo presenta los métodos comunes del módulo Imagen.

En segundo lugar, abra la imagen local

Imagen original:

# coding=utf-8
from PIL import Image

image = Image.open("yazi.jpg")
image.show()

resultado de la operación:

open (fp, mode = 'r'): abre una imagen, que es una función en el módulo Imagen. Si la imagen y el código actual están en el mismo directorio, solo puede escribir el nombre de archivo de la imagen; de lo contrario, se requiere la ruta de la imagen empalmada. El modo predeterminado es 'r' y también debe ser 'r'.

mostrar (): Llame al software de visualización de imágenes para abrir la imagen. Después de abrir, el programa se bloqueará y debe cerrarse manualmente.

Tres, crea una nueva imagen

from PIL import Image


image = Image.new('RGB', (160, 90), (0, 0, 255))
image.show()

resultado de la operación:

nuevo (modo, tamaño, color = 0): Crea una imagen (lienzo) para dibujar, es una función en el módulo Imagen. Hay 3 parámetros.

modo, el modo de la imagen, como "RGB" (abreviatura de los tres colores primarios de rojo, verde y azul, imagen de color verdadero), "L" (escala de grises, imagen en blanco y negro), etc.

tamaño, el tamaño de la imagen. Es una tupla de longitud 2 (ancho, alto), que representa el tamaño del píxel.

color, el color de la imagen, el valor predeterminado es 0 significa negro. Puede pasar una tupla de longitud 3 para representar el color, o puede pasar el número hexadecimal del color. Después de la versión 1.1.4, también puede pasar directamente las palabras en inglés del color, como (0, 0, 255) se puede reemplazar por '# 0000FF' o 'azul', ambos significan azul.

Cuarto, los atributos comunes del módulo Imagen.

from PIL import Image


image = Image.open("yazi.jpg")
print('width: ', image.width)
print('height: ', image.height)
print('size: ', image.size)
print('mode: ', image.mode)
print('format: ', image.format)
print('category: ', image.category)
print('readonly: ', image.readonly)
print('info: ', image.info)

resultado de la operación:

width:  1557
height:  911
size:  (1557, 911)
mode:  RGBA
format:  PNG
category:  0
readonly:  1
info:  {'dpi': (120, 120), 'Software': 'Snipaste'}

El atributo de ancho representa el ancho de píxel de la imagen, el atributo de altura representa la altura de píxel de la imagen, el ancho y la altura del atributo de tamaño y el tamaño es una tupla.

El atributo de modo indica el modo de la imagen, como RGBA, RGB, P, L, etc.

El atributo de formato indica el formato de la imagen y el formato generalmente está relacionado con la extensión del sufijo de la imagen. El atributo de categoría indica la categoría de la imagen.

El atributo readonly indica si la imagen es de solo lectura y el valor es 1 o 0, lo que indica un valor booleano.

El atributo info representa la información de la imagen y es un diccionario.

Cinco, modo de imagen y conversión de modo

1. Modo de imagen

Hay muchos modos de imágenes y se admiten los siguientes modos estándar; consulte: https://pillow.readthedocs.io/en/latest/handbook/concepts.html#concept-modes

modo descripción
1 Píxel de 1 bit, blanco y negro, cada byte almacena un píxel
L Píxeles de 8 bits, blanco y negro
P  Píxeles de 8 bits, use la paleta para mapear a cualquier otro modo
RGB  Píxeles de 3x8 bits, color verdadero
RGBA  Píxeles de 4x8 bits, color verdadero con máscara transparente
CMYK  Píxeles de 4x8 bits, separación de colores
YCbCr  Píxeles de 3x8 bits, formato de video en color
LAB  Píxeles de 3x8 bits, espacio de color L * a * b
HSV  Píxeles de 3x8 bits, tono, saturación, espacio de color de valor
I  Píxel entero de 32 bits con signo
F  Píxeles de coma flotante de 32 bits

El rango de píxeles de 1 bit es 0-1, 0 significa negro, 1 significa blanco y el medio significa gris. El rango de píxeles de 8 bits es 0-255, por ejemplo, RGB (0, 0, 0) significa negro, (255, 255, 255) significa blanco, etc.

2. Conversión de modo de imagen

from PIL import Image


image = Image.open("yazi.jpg")
print(image.mode)
image1 = image.convert('1')
print(image1.mode)
# image1.show()
image_l = image.convert('L')
print(image_l.mode)
# image_l.show()
image_p = image.convert('P')
print(image_p.mode)
image_p.show()

resultado de la operación:

RGBA
1
L
P

convertir (self, mode = None, matrix = None, dither = None, palette = WEB, colors = 256): convierte la imagen al modo especificado y devuelve una copia de la imagen convertida. Si no especifica un modo, se selecciona automáticamente un modo que conserva toda la información de la imagen y no usa la paleta (el resultado habitual es que no haya conversión). Al convertir una imagen en color a escala de grises ('L'), utilice ITU-R 601-2 para la conversión de brillo: L = R * 299/1000 + G * 587/1000 + B * 114/1000. Al convertir la escala de grises ('L') o el color verdadero ('RGB') al modo '1', si el parámetro de tramado es 'NINGUNO', todos los valores superiores a 128 se establecen en 255 (blanco) y todos los demás valores Están configurados Es 0 (negro).

El método convert () tiene 5 parámetros.

modo, el modo de la imagen, pasa al modo que necesita ser convertido. Algunos modos no admiten la conversión y el código informará un error.

matrix, la matriz de conversión. Al pasar este parámetro, debe pasar una tupla compuesta por números de punto flotante, la longitud de la tupla es 4 o 12. Matrix solo admite la conversión de algunos modos a 'L' o 'RGB'.

tramado, vibración de alta frecuencia, que se utiliza para controlar el tramado de color. Se utiliza al convertir de modo 'RGB' a 'P' o de 'RGB' o 'L' a '1'. Los métodos disponibles son 'NINGUNO' o 'FLOYDSTEINBERG' (predeterminado). Esta función no se utiliza cuando se proporciona el parámetro de matriz.

paleta, paleta, utilizada para controlar la generación de paleta. Se utiliza cuando se convierte del modo 'RGB' a 'P'. Los métodos disponibles son 'WEB' (predeterminado) o 'ADAPTATIVO'. 'ADAPTATIVO' significa utilizar una paleta de colores adaptativa.

colores, el número de colores utilizados por la paleta adaptativa. Cuando el parámetro de paleta es 'ADAPTATIVO', se usa para controlar el número de colores en la paleta. El valor predeterminado es el valor máximo, que es 256 colores.

2.1 Comparación del efecto de los parámetros de la matriz

from PIL import Image


image = Image.open("yazi.jpg")
image_rgb = image.convert('RGB')
print(image_rgb.mode)
image_l = image_rgb.convert('L')
image_l.show()
matrix = (0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6)
image_l2 = image_rgb.convert('L', matrix=matrix)
image_l2.show()

resultado de la operación:

En el código anterior, se pasa al parámetro de la matriz una tupla de longitud 12. El valor de la matriz cambia el efecto de la conversión. El grado de cambio depende del valor del número de punto flotante en la tupla pasada. Tenga en cuenta que algunos modos no son compatibles, como 'RGBA', y la longitud de la tupla entrante debe ser 4 o 12; de lo contrario, se informará un error.

2.2 Comparación de efectos de los parámetros de la paleta

from PIL import Image


image = Image.open("yazi.jpg")
image_p = image.convert('P')
# image_l.show()
image_p2 = image.convert('P', palette='ADAPTIVE', colors=256)
image_p2.show()

resultado de la operación:

En el código anterior, el parámetro de la paleta se cambia a 'ADAPTATIVO', la diferencia de la imagen no es grande, pero si los colores se hacen más pequeños, la diferencia será mayor, pero eso empeorará el efecto de la imagen.

6. Copie, pegue y guarde imágenes

from PIL import Image


image = Image.open("yazi.jpg")
image_copy = image.copy()
# image_copy.show()
image_new = Image.new('RGB', (160, 90), (0, 0, 255))
image_new2 = Image.new('L', (160, 90), '#646464')
image_copy.paste(image_new, (100, 100, 260, 190), mask=image_new2)
image_copy.save('duck.png')
image_save = Image.open('duck.png')
print(image_save.format, image_save.mode)
image_copy.show()

resultado de la operación:

PNG RGBA

copiar (): copia la imagen actual, la imagen copiada es exactamente la misma que la imagen original. Si desea pegar algún contenido en la imagen, pero también desea conservar la imagen original, puede utilizar este método.

paste (im, box = None, mask = None): pega otra imagen en la imagen actual. Si el patrón pegado no coincide, el patrón de la imagen pegada se convertirá al patrón de la imagen actual. Hay 3 parámetros.

im, la imagen que se va a pegar. Pasar una imagen. Cuando el segundo cuadro de parámetro especifica un área, el parámetro im también puede ser un número entero o un valor de color (se puede usar representación de tupla, representación hexadecimal y nombre de color, como image_new en el código anterior Se puede reemplazar por (0, 0, 255), '# 0000FF', 'azul').

cuadro, la ubicación o el área donde se pega la imagen. Pase una tupla con una longitud de 2 o 4. Si no se pasa ningún valor, el valor predeterminado es (0, 0) y la imagen se pega en la esquina superior izquierda de la imagen actual. Si se pasa una tupla (x, y) de longitud 2, indica la posición de las coordenadas de la esquina superior izquierda de la imagen pegada. Si se pasa una tupla de longitud 4 (x0, y0, x1, y1), indica el área donde se pega la imagen. En este momento, el tamaño del área debe ser el mismo que la imagen que se va a pegar, de lo contrario se informará un error y la longitud de la tupla pasada es otro valor. Los errores también se informarán.

máscara, máscara. Pase una imagen con el mismo tamaño que la imagen pegada, y se puede usar una imagen con el modo '1', 'L' o'RGBA '. Si el valor de color de la imagen de la máscara es 255, se pegará directamente de acuerdo con el color de la imagen pegada. Si el valor de color de la imagen de la máscara es 0, se retiene el color de la imagen actual (equivalente a no pegar) , si el valor de color de la imagen de la máscara es 0 ~ Para valores entre 255, mezcle im y mask antes de pegar.

save (fp, format = None, ** params): guarde la imagen actual con el nombre de archivo especificado y, después de ejecutarla, la imagen se guardará en la ruta actual con el nuevo nombre (también puede especificar la ruta). Es mejor que el nombre del archivo tenga una extensión, que sea conveniente para abrir. El formato indica el formato de la imagen. Si no se especifica el formato, se analizará de acuerdo con la extensión (si se puede analizar). Generalmente, hay no es necesario especificar el formato Pase un nombre de archivo con una extensión.

Siete, recorte de imagen y zoom

from PIL import Image


image = Image.open("yazi.jpg")
image_crop = image.crop(box=(300, 300, 800, 700))
# image_crop.show()
print('before resize: ', image.size)
image_resize = image.resize((500, 400), resample=Image.LANCZOS, box=(100, 100, 1200, 800), reducing_gap=5.0)
print('after resize: ', image_resize.size)
image_resize.show()

resultado de la operación:

before resize:  (1557, 911)
after resize:  (500, 400)

recortar (cuadro = Ninguno): recorta la imagen y devuelve la imagen en el área recortada. El cuadro representa el área recortada. Pase una tupla de longitud 4 (x0, y0, x1, y1). Si no la pasa, el valor predeterminado es copiar la imagen original, que es equivalente al método copy () Si el área recortada excede el área de la imagen original, la parte sobrante se rellena con cuadrículas de píxeles.

resize (size, resample = BICUBIC, box = None, reduciendo_gap = None): cambia el tamaño de la imagen y devuelve una copia de la imagen ampliada. Hay 4 parámetros.

size, el tamaño de la imagen después de hacer zoom y se pasa una tupla de longitud 2 (ancho, alto).

remuestreo, remuestreo, es un filtro de remuestreo opcional. Puede pasar Image.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOS. El valor predeterminado es Image.BICUBIC. Si el modo de la imagen es '1' o 'P', siempre se establece en Imagen. MÁS CERCANO.

cuadro, amplíe el área de la imagen. Pase una tupla (x0, y0, x1, y1) con una longitud de 4. Esta área debe estar dentro del rango (0, 0, ancho, alto) de la imagen original. Si excede el rango, se producirá un error. Si no se pasa el valor, el valor predeterminado será un número entero La imagen original se amplía.

Reducir la brecha, reducir la brecha. Pase un número de punto flotante para optimizar el efecto de zoom de la imagen. De forma predeterminada, no se realiza ninguna optimización. Cuando el valor es mayor que 3.0, el efecto de optimización es básicamente un remuestreo justo.

El módulo de imagen también tiene muchos métodos y funciones para el procesamiento de imágenes. Para obtener más información, consulte: https://blog.csdn.net/weixin_43790276/article/details/108673454

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43790276/article/details/108478270
Recomendado
Clasificación