[英]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
)。
你可以做几件事:
另存为 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')
你得到的图像看起来像这样
指定 JPEG subsampling=0
或subsampling="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.