La profundidad de mapa de bits PIL.image.save () guarda la imagen y el tamaño se hace más grande

Hoy, quiero usar PIL para dibujar rectángulos de colores en imágenes bmp. El código es el siguiente:

from PIL import Image,ImageDraw

img = Image.open("test.bmp”)
img = img.convert("RGB")
draw = ImageDraw.Draw(img)
draw.rectangle((100, 200, 300, 400), width=6, outline=(0,255,0))
img.save("test_bak.bmp", quality=95)

¡Resulta que el tamaño de la imagen recién generada es 3 veces mayor!
Buscando la razón, inicialmente pensé que el valor del parámetro de calidad estaba configurado para ser grande, y era inútil cambiarlo a uno más pequeño.
Después de comparar cuidadosamente la información de las dos imágenes, finalmente descubrí que la profundidad de bits es diferente: la imagen original tiene una profundidad de bits de 8 y la nueva imagen es de 24. Esto explica por qué el tamaño es 3 veces más grande.

Entonces, ¿cuál es el concepto de esta profundidad de bits? Revisé el internet. De acuerdo con el principio de tres colores primarios, cada punto de la imagen está compuesto de tres puntos, que son rojo, verde y azul para la computadora. El brillo diferente de estos tres puntos presenta al usuario diferentes colores.

La llamada profundidad es el rango de la "escala" de cada pigmento desde el más oscuro hasta el más brillante. Cuanto más escalas, más realista es el control del color natural, y la distorsión es la otra.
Por lo tanto, el color representado por 32 bits es, por supuesto, más realista que 24 bits, por supuesto, 24 bits es más realista que 16 bits, y así sucesivamente. Cuanto mayor sea la profundidad, cuanto mayor sea el archivo de imagen, más tiempo demorará la computadora en procesar y más espacio ocupará.

En mi programa, es fácil averiguar dónde se convierte esta profundidad, que es img.convert ("RGB").
De acuerdo con la documentación de PIL.Image , la propiedad de la profundidad de la imagen está controlada por el modo.
Inserte la descripción de la imagen aquí
El apoyo PIL.Image que los modos de la misma?
Inserte la descripción de la imagen aquí
Imprimí el img.mode antes de la conversión, y el resultado es "L", que es una imagen en blanco y negro de 8 bits de profundidad. Para dibujar un marco verde en la imagen, lo convertí a RGB, que es una imagen de color oscuro de 24 bits. Entonces, está muy claro lo que está sucediendo con este programa.

Entonces depende de la elección personal. Puedo aceptar temporalmente que la imagen se agrande, ya que este es solo un archivo temporal generado, y lo eliminaré cuando se agote. Si tiene otras necesidades, puede pensar en otras formas, que dependen de la necesidad de elegir una solución.

104 artículos originales publicados · Me gusta8 · Visita 210,000+

Supongo que te gusta

Origin blog.csdn.net/sunnyboychina/article/details/105001535
Recomendado
Clasificación