将图像从 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")
我正在尝试将图像从 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")