Я не могу установить данные пикселей изображения PNG - PullRequest
0 голосов
/ 07 июня 2019

У меня большой набор изображений.Некоторые в формате JPEG, некоторые в формате PNG.Для PNG я создаю программу для преобразования всех прозрачных пикселей в обычный белый.Однако, это не только не работает, некоторые фоны меняются на случайные цвета, такие как красный и зеленый.Я понятия не имею, что я делаю неправильно, поэтому вот мой код:

import os
from PIL import Image

files = os.listdir("/Users/Riley/PycharmProjects/myNN/logos")

for file in files:
    print(file)

    image = Image.open("/Users/Riley/PycharmProjects/myNN/logos/" + file)
    pixels = image.load()

    if image.mode == 'RGBA':
        print("RGBA")
        for x in range(image.size[0]):
            for y in range(image.size[1]):
                if pixels[x, y][3] < 1:
                    pixels[x, y] == (255, 255, 255, 1)
                    print(pixels[x, y])

        image = image.convert('RGB')

print(pixels[x, y]) предназначен для устранения неполадок.Я не получаю ошибки, но он выводит случайные значения RGBA, несмотря на то, что только затем устанавливает его (255, 255, 255, 1).Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

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

from PIL import Image

# Open original with transparency
im = Image.open('image.png').convert('RGBA')

# Make white background same size
white = Image.new('RGB',im.size,color='white')

# Paste onto background
white.paste(im,mask=im)

# Save
white.save('result.png')

Кстати, вы можете сделать это вообще без написания Python, просто используя ImageMagick , который установлен в большинстве дистрибутивов Linux и доступен для macOS и Windows.

Сначала создайте выходной каталог, куда будут попадать результаты:

mkdir output

Затем выровняйте все ваши PNG на белом фоне:

magick mogrify -path output -background white -flatten /Users/Riley/PycharmProjects/myNN/logos/*png

Если ваш ImageMagick v6 или старше, отбросьте magick и используйте:

mkdir output
mogrify -path output -background white -flatten /Users/Riley/PycharmProjects/myNN/logos/*png
1 голос
/ 07 июня 2019

pixels[x, y] == (255, 255, 255, 1) - это сравнение, а не присвоение.

Возможно, вы захотите заменить это утверждение на pixels[x, y] = (255, 255, 255, 1).

...