python3 + Pillow 批量处理简单gif 转成 png 并透明化 去掉背景色

1. 安装Pillow, 只用这个应该也可以,

https://blog.csdn.net/Tui_GuiGe/article/details/105000851

2. 安装 cImage

https://codeload.github.com/bnmnetp/cImage/zip/master

下载后解压,拷贝image.py到你python安装目录的 Lib\site-packages 中。

 

 

from PIL import Image
import os
import image

def get_imlist(path):
    """返回目录中所有gif图像的文件名列表图像的文件名列表"""
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith(".gif")]

path = "E:\sucai\change_git_to_png\last-guardian-sprites"
listdir = get_imlist(path)

print (listdir)

def iter_frames(im):
    try:
        i= 0
        while 1:
            im.seek(i)
            imframe = im.copy()
            if i == 0:
                palette = imframe.getpalette()
            else:
                imframe.putpalette(palette)
            yield imframe
            i += 1
    except EOFError:
        pass
"""for i, frame in enumerate(iter_frames(im)):"""
"""    frame.save('bmg4_rt2.png',**frame.info)"""
for dir in listdir:
    print(dir)
    im = Image.open(dir)

    for i, frame in enumerate(iter_frames(im)):
        png_file_name = (str(dir)[:-3]+'png')
        frame.save(png_file_name,**frame.info)
        png_im = Image.open(png_file_name)
        png_im = png_im.convert('RGBA')
        width = png_im.size[0]
        height = png_im.size[1]
        color_0 = png_im.getpixel((0,0))
        newImage = []
        for png_i in range(0, width):
            for png_j in range(0, height):
                png_data = png_im.getpixel((png_i, png_j))
                if (png_data == color_0):
                    png_data = png_data[:-1] + (0,)
                    png_im.putpixel((png_i, png_j),png_data)

        png_im.save(png_file_name)

 

说明:

1. Image.open(png_file_name)  打开png,默认只有 RGB 三通道

2. 转成 RGBA 四通道,最后那个A表示透明度,取值范围是0到255, 值越大表示越不透明,

所以我们的目标就是要把透明度设置为0。

png_data[:-1] 就是取 RGB 三个值,  +  (0,) 就是 把A设置成0.

然后改变 点(i,j)的像素。

3. 别忘记再次 保存为png 图片格式。

 

 

效果

我使用的是GIMP打开的。

 

参考资料,感谢:

1. https://blog.csdn.net/qq_40878431/article/details/82941982

2. https://www.cnblogs.com/future-dream/p/10901229.html

3. https://stackoverflow.com/questions/29313667/how-do-i-remove-the-background-from-this-kind-of-image

4. https://blog.csdn.net/ACBattle/article/details/80800747

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tui_GuiGe

鼓励一下作者吧,请他喝一瓶啤酒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值