繁体   English   中英

使用 python PIL 库保存图像的问题

[英]Problem with saving image using python PIL library

我尝试创建由两列组成的非常简单的图像——一列绿色,另一列红色,但是当我运行如下所示的脚本时,我在其他 colors 中得到了一个图像。 知道为什么会这样吗?

from PIL import Image

list=[(0,255,00),(255,0,0),(0,255,00),(255,0,0),(0,255,00),(255,0,0)]
a=Image.new('RGB',(2,3), "white")
a.putdata(list)
a.save('my_picture.jpg')

我得到的图像:在此处输入图像描述

这是因为您将图像保存为 JPEG,默认情况下将启用各种选项,这些选项将改变图像的 colors(因为 JPEG 是有损图像类型),尤其是Chroma Subsampling ,这将改变“感知” colors 您的图像。 由于您正在制作如此小的图像,因此这种效果将非常显着,并导致您看到 colors,并且默认情况下libjpeg可能使用4:2:2子采样(而不是4:4:4 )。

你可以做几件事:

  1. 另存为 PNG

    如果您正在处理计算机图形图像(就像您现在正在做的那样)而不是照片级别的东西,请将您的图像保存为无损的 PNG。

     from PIL import Image pixels = [(0,255,00),(255,0,0),(0,255,00),(255,0,0),(0,255,00),(255,0,0)] a=Image.new('RGB',(2,3), "white") a.putdata(pixels) a.save('my_picture.png')

    你得到的图像看起来像这样

    示例 PNG

  2. 指定 JPEG subsampling=0subsampling="4:4:4"

    您可以使用subsampling=0选择4:4:4子采样,并获得最高级别的子采样以尽可能保留您的预期 colors。

     a.save("my_picture.jpg", quality=95, subsampling=0)

    您生成的 JPEG 看起来可能与您预期的一样:

    在此处输入图像描述


您可以看到更多关于如何处理图像格式的选项,以下是您可以指定的subsampling选项:

subsampling

    If present, sets the subsampling for the encoder.

        keep: Only valid for JPEG files, will retain the original image setting.

        4:4:4, 4:2:2, 4:2:0: Specific sampling values

        0: equivalent to 4:4:4

        1: equivalent to 4:2:2

        2: equivalent to 4:2:0

    If absent, the setting will be determined by libjpeg or libjpeg-turbo.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM