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



我有一大组图像。有些是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(。谢谢。

你不需要这样做。更容易、更快捷地制作一张与具有透明度的白色图像大小相同的白色图像,然后将具有透明度的图像粘贴到顶部,白色就会显现出来。

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的情况下做到这一点,只需使用安装在大多数Linux发行版上的ImageMagick,可用于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

pixels[x, y] == (255, 255, 255, 1)是一种比较,而不是作业。

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

最新更新