【python

您所在的位置:网站首页 ppt抠图透明底 【python

【python

2024-03-05 16:11| 来源: 网络整理| 查看: 265

 1.图片处理-修改颜色

有时候有种困扰!把网上的截屏,或者一般图片拖到PPT或者其他文档里面去,会有一个明显的白底框框。

放进PPT里面也太丑了点,干脆把图片的白底给弄透明,可就为这下个PS,不符合程序员的风格!

能写代码自动化解决的当然写代码了!

对了,这个还能把手机拍照的---手写签名呀~之类的抠出来放进word也毫无违和感了.

from PIL import Image def process(self, image_file, old_bk, new_bk, text_color): ''' 将图像特定颜色改为新颜色,前文改为设定颜色或者原始颜色 ''' img = Image.open(image_file).convert("RGBA") datas = img.getdata() newData = [] for item in datas: if self.is_around(item, old_bk): newData.append(new_bk) else: newData.append(text_color if text_color else item) img.putdata(newData) return img

process函数主要就是干了一件事:

判断像素RGBA是否在某个值附近——修改颜色,否则保持原色 or 改成你想要的。

按理来说,把一个白色的背景搞成渐变色也可以,只需要old_bk设置为白色的RGBA值,new_bk用个yield不断得到渐变的颜色值就好了。有需要的自己做吧~

 2.透明化 def transparent(self, image_file, bk_color, text_color=None): process(image_file, bk_color, (0, 0, 0, 0), text_color)

就是把process的参数改成需要的,bk_color一般设置为白底(255,255,255,~),后面改变的参数设置为透明(~,~,~,0)

RGBA最后一位表示透明度。text_color 为None 的时候就让图片的前景保持不变。

这样就实现了抠图的效果。比方下面这个CSDN的图标,放进PPT里面明显很突兀;抠图完就成这样了,舒服多了~

3.代码 import os from PIL import Image class Transcolor(): def __init__(self): self.color_map = { 'white': (255, 255, 255, 0), 'black': (0, 0, 0, 0), } def process(self, image_file, old_bk, new_bk, text_color): ''' 将图像特定颜色改为新颜色,前文改为设定颜色或者原始颜色 ''' img = Image.open(image_file).convert("RGBA") datas = img.getdata() newData = [] for item in datas: if self.is_around(item, old_bk): newData.append(new_bk) else: newData.append(text_color if text_color else item) img.putdata(newData) return img def transparent(self, image_file, bk_color='white', text_color=None): #透明化 bk = self.formulate(bk_color) text_color = self.formulate(text_color) if text_color else None return self.process(image_file, bk, (0, 0, 0, 0), text_color) def is_around(self, color1, color2): for i in range(3): if abs(color1[i] - color2[i]) > 30: return False return True def formulate(self, var): #格式检查 if var in self.color_map.keys(): return self.color_map[var] for n, i in enumerate(var): if i < 0 or i > 255 or n >= 4: print('Error:请输入white|black|phote_w|(220,220,220,0)RGBA形式') exit(1) return var if __name__ == "__main__": t = Transcolor() photo_dir = 'res/photo' for i in os.listdir(photo_dir): if os.path.splitext(i)[1].lower() in ['.jgp', '.png', '.jpeg', '.bmp']: path = os.path.join(photo_dir, i) t.transparent(path).save(path + '.png')

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3