Profundidade do bitmap PIL.image.save () salva a imagem e o tamanho fica maior

Hoje, quero usar o PIL para desenhar retângulos coloridos em imagens bmp. O código é o seguinte:

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)

Acontece que o tamanho da imagem recém-gerada é 3 vezes maior!
Procurando o motivo, inicialmente pensei que o valor do parâmetro de qualidade estava definido para ser grande e que era inútil alterá-lo para um menor.
Depois de comparar cuidadosamente as informações das duas figuras, finalmente descobri que a profundidade de bits é diferente: a imagem original tem uma profundidade de 8 e a nova imagem é 24. Isso explica por que o tamanho é 3 vezes maior.

Então, qual é o conceito dessa profundidade de bits? Verifiquei a Internet. De acordo com o princípio das três cores primárias, cada ponto da imagem é realmente composto por três pontos, vermelho, verde e azul para o computador.O brilho diferente desses três pontos apresenta ao usuário cores diferentes.

A chamada profundidade é o intervalo da "escala" de cada pigmento, do mais escuro ao mais claro.Quanto mais escalas, mais realista é o controle natural da cor, e a outra é a distorção.
Portanto, a cor representada por 32 bits é obviamente mais realista que 24 bits, é claro que 24 bits é mais realista que 16 bits e assim por diante. Quanto maior a profundidade, maior o arquivo de imagem, mais tempo o computador leva para processar e mais espaço é necessário.

No meu programa, é fácil descobrir onde essa profundidade é convertida, que é img.convert ("RGB").
De acordo com a documentação do PIL.Image , a propriedade de profundidade da imagem é controlada pelo modo.
Insira a descrição da imagem aqui
O apoio PIL.Image que Modos de ele?
Insira a descrição da imagem aqui
Imprimi o img.mode antes da conversão e o resultado é "L", que é uma imagem em preto e branco de 8 bits de profundidade. Para desenhar um quadro verde na imagem, eu o convertei em RGB, que é uma imagem de cor escura de 24 bits. Portanto, é muito claro o que está acontecendo com este programa.

Então depende da escolha pessoal. Posso aceitar temporariamente que a imagem fique maior, porque este é apenas um arquivo temporário gerado, e eu a excluirei quando acabar. Se você tiver outras necessidades, poderá pensar em outras maneiras, dependendo da necessidade de escolher uma solução.

Publicado 104 artigos originais · Gosto8 · Visite mais de 210.000

Acho que você gosta

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