我无法设置PNG图像的像素数据

时间:2019-06-07 15:23:47

标签: python image-processing png python-imaging-library

我有很多图像。有些是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])用于故障排除。我没有收到任何错误,尽管它只是将其设置为(255,255,255,1),但它仍然打印出随机的RGBA值。 谢谢。

2 个答案:

答案 0 :(得分:2)

您不需要这样做。用透明的颜色将白色的新图像制作成与您的图像相同的大小,并粘贴顶部具有透明性的白色图像会更容易,更快,白色将显示出来。

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')

顺便说一句,您只需使用 ImageMagick (完全安装在大多数Linux发行版中,并且适用于macOS和Windows)即可完全不编写任何Python。

首先,在输出目录中放置结果:

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 :(得分:1)

pixels[x, y] == (255, 255, 255, 1)是一个比较,而不是赋值。

您可能希望将该语句替换为pixels[x, y] = (255, 255, 255, 1)