将图像从 RGBA 转换为 RGB 显示填充,如何裁剪?

Converting Image from RGBA to RGB reveals padding, how to crop that?

我正在尝试将图像从 RGBA 转换为 RGB。但是转换为 RGB 是为图像添加填充。如何在没有填充的情况下进行转换?或者我该如何删除它?

    img = Image.open('path.png')
    img.save("img.png")
    
    rgb_im = img.convert('RGB')
    rgb_im.save("rgb_im.png")

谢谢。下图,转换前后:

如果您打开第一张图片,您会看到 canvas 比可见图片大,因为您有一个由具有 rgba=(255,255,255,0) 的像素表示的透明框架。当您通过将 RGBA 转换为 RGB 移除 alpha 通道时,透明度消失,因为只剩下 rgb=(255,255,255),这就是您在第二张图片中看到的白色。

所以你想制作类似于建议的内容here

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