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