0
点赞
收藏
分享

微信扫一扫

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

老王420 2022-04-13 阅读 49

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通道(最坑的点)…


解决方案:

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

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

举报

相关推荐

0 条评论