python PIL.Image 如何将图像自带的Alpha透明度去除,例如将'RGBA'

[复制链接]
发表于 2025-3-3 19:53:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前言
在练习文生图大模型之前,网络练习数据是很重要的一步,
而在网络上获取的许多图片规格不一,给数据的同一处置惩罚和导入带来了不少麻烦。
其中有一种特殊环境,就是图像自带透明度(Alpha),通常在文件信息中就会有显示,好比下面这张图:
    

在这种环境下,如果直接用cv2或PIL将它转化为"RGB"模式,会导致得到的图片是纯玄色的。
 
解决办法
如果是由于透明度导致,那么解决的直接思路就是给整张图片加一块同等大小的白色背景,
这里用到的函数为:
  1. PIL.Image.alpha_composite()
复制代码

 
在批量处置惩罚图片时,还需要加上判断该图片是否包含透明度的逻辑,
代码如下:
  1. from PIL import Image
  2. import os
  3. from os.path import join as ospj
  4. src_dir = ''
  5. dst_dir = ''
  6. for f in os.listdir(src_dir):
  7.     src_path = ospj(src_dir, f)
  8.     dst_path = ospj(dst_dir, f)
  9.     if f.endswith('DS_Store'):
  10.         continue
  11.     else:
  12.         img = img = Image.open(src_path)
  13.         # 查看图片是否包含透明度
  14.         if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
  15.             # 准备一张同等尺寸的白色背景
  16.             background = Image.new('RGBA', img.size, (255, 255, 255))
  17.             # 复合原图与背景图
  18.             alpha_composite = Image.alpha_composite(background, img)
  19.             # 将复合后的图片转为"RGB"模式并保存
  20.             alpha_composite = alpha_composite.convert('RGB')
  21.             alpha_composite.save(dst_path)
  22.         else:
  23.             img.save(dst_path)
复制代码
 
 
The End
 
 
                      
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表