Я пытаюсь преобразовать изображение из RGBA в RGB. Но преобразование в RGB добавляет дополнение к изображению. Как я могу преобразовать без заполнения? Или как я могу удалить его?
img = Image.open('path.png')
img.save("img.png")
rgb_im = img.convert('RGB')
rgb_im.save("rgb_im.png")
Спасибо. Изображения ниже, до и после преобразования:
Это не заполнение, вы просто удаляете прозрачность из кадра, поэтому он становится белым, а не прозрачным. Вы должны обрезать изображение.
Если вы откроете свое первое изображение, вы увидите, что холст больше, чем видимое изображение, так как у вас есть прозрачная рамка, представленная пикселями, имеющими rgba=(255,255,255,0)
. Когда вы удаляете канал alpha
путем преобразования RGBA в RGB, эта прозрачность исчезает, так как остается только rgba=(255,255,255)
, который оказывается белым, который вы видите на втором изображении.
Итак, вы хотите сделать что-то похожее на предложенное здесь
from PIL import Image, ImageChops
def trim_and_convert(im):
bg = Image.new(im.mode, im.size, (255,255,255,0))
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
return im.crop(bbox).convert('RGB')
im = Image.open("path.png")
rgb_im = trim_and_convert(im)
rgb_im.save("rgb_im.png")
Вы не показываете изображения! Я могу только догадываться, что альфа-канал делает что-то неожиданное. Может попробовать кадрировать до альфа-канала stackoverflow.com/a/63244423/2836621