【问题标题】:How to avoid Pillow slightly editing my images after it saves them?如何避免 Pillow 在保存图像后稍微编辑我的图像?
【发布时间】:2019-10-04 20:17:34
【问题描述】:

我正在尝试创建一个生成二进制 RGB 图像的脚本,所有像素必须是黑色 (0,0,0) 或白色 (255,255,255)。问题是当脚本保存输出时,一些像素会有不同的黑白色调的随机值,例如(14,14,14),(18,18,18),(241,241,241)。

#Code generated sample:
from PIL import Image
sample = Image.new('RGB', (2,2), color = (255,255,255)) 
#A four pixel image that will do just fine to this example
pixels = sample.load()
w, h = sample.size #width, height
str_pixels = ""

for i in range(w): #lines
    for j in range(h): #columns

        from random import randint
        rand_bool = randint(0,1)
        if rand_bool:
            pixels[i,j] = (0,0,0)

        str_pixels += str(pixels[i,j]) 
#This will be printed later as single block for readability

print("Code generated sample:") #The block above
print(str_pixels)

#Saved sample:

sample.save("sample.jpg")   
saved_sample = Image.open("sample.jpg")
pixels = saved_sample.load()
w, h = saved_sample.size
str_pixels = ""

for i in range(w):
    for j in range(h):
        str_pixels += str(pixels[i,j])

print("Saved sample:")
print(str_pixels)

>> Code generated sample:
>>(255, 255, 255)(0, 0, 0)(0, 0, 0)(255, 255, 255)
>>Saved sample:
>>(248, 248, 248)(11, 11, 11)(14, 14, 14)(242, 242, 242)

一种解决方案是创建一个 philter,将值更改为 0 或 255,而这些值将实际使用,但希望有更好的。这是使用 Windows 测试的。

【问题讨论】:

  • JPEG 不会保留您的像素。这是有损的。使用 PNG、PPM 或 TIFF,它们是无损的。

标签: python python-3.x image-processing python-imaging-library


【解决方案1】:

这个问题源于.jpg的使用,它使用了有损空间压缩。

我建议使用.png,这是一种无损压缩,非常适合像您这样具有很少不同值的数据。您可以阅读.png 压缩算法以了解更多信息。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2011-11-01
    • 2013-02-28
    • 2023-03-30
    • 2011-08-25
    • 1970-01-01
    • 2013-03-17
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多