PyGame导入带alpha通道(透明度)的图片时遇到的小问题

PyGame导入带alpha通道(透明度)的图片时遇到的小问题

2022/4/8
在写玩具的时候想导有区域透明度的图片进pygame里,网上搜寻答案,看上去有效的和隔空对线的都没能解决问题。两个小时交代在这里了。想着也许以后能用上就花一点时间记录一下。


问题描述

带透明区域的png图片导入pygame里之后透明部分始终被白色部分填充如下:

在这里插入图片描述

而我实际希望达到的效果如下:在这里插入图片描述

测试用窗口的主循环代码

# 窗口的主循环代码
while win32api.GetKeyState(0x1b) >= 0:  # 显示循环--esc退出
    clock.tick(60)  # 帧率控制
    for event in win.event.get():  # 这个循环是pygame自身的事件侦听循环
        if event.type == pygame.QUIT:  # 这个if用来判断监听窗体右上角叉叉
            pygame.quit()
            sys.exit()  # 如果不加会报错 pygame.error: video system not initialized
            
    screen.fill(pygame.Color(0, 50, 50))  # 填充背景色
    # screen.blit(ball, pos)  # 同下
    screen.blit(enemy, pos)  # 绘制
    # tmp.blit(screen, (0, 0))  # tmp来自于网上看到的另一种方法,但是没有解决问题
    # tmp.blit(enemy, (-25, -25))  
    # screen.blit(tmp, pos)
    render_text(str(int(clock.get_fps())), (255, 0, 0), (0, 0))  # 窗体左上角的实时帧率
    win.display.update()

原因分析:

pygame 中导入带透明度的图片靠函数 convert_alpha() 实现,这个函数用到了alpha通道(最坑的点)…


解决方案:

给源图像添加一个alpha通道即可

但是,从ps绘制导出的png格式图片虽然是“透明的”,但是它没有“事实上的”alpha通道。从ps里新建一个带透明度的图形以png保存后再用ps打开png文件可以发现png文件并没有alpha通道。

个人解决方案

将图片存储为bpm格式,并且在另存为图片(而非导出)时确保最底层图层是一个空的透明图层,同时在通道中有一个由 右键-存储选区得到的alpha图层,并保持 形状图层、底层透明图层和alpha通道的可见性,另存为bpm格式(勾选alpha通道)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值