Как избежать того, чтобы Подушка слегка редактировала мои изображения после того, как они их сохранили? - PullRequest
3 голосов
/ 04 октября 2019

Я пытаюсь создать скрипт, который генерирует двоичные изображения 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)

Решением было бы создание фильтра, который изменяет значения на 0 или 255, когда эти значения будут фактически использоваться, но, надеюсь, есть лучший. Это было проверено с использованием Windows.

1 Ответ

6 голосов
/ 04 октября 2019

Эта проблема связана с использованием .jpg, в котором используется пространственное сжатие с потерями.

Я рекомендую использовать .png, которое представляет собой сжатие без потерь, хорошо подходящее для данных, подобных вашим, когда у вас очень мало различныхценности. Вы можете прочитать о .png алгоритмах сжатия, чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...