

私は現在Pygameでソフトを制作しています。  
画像透過処理について意見をお聞きしたいと思い質問させていただきます。  
Pygameで作成したwindowで画像をフェードアウトさせたいと思っています。  
なにか良い方法は無いでしょうか？  
どうぞよろしくお願いします。  
（Pillowなどの有名なライブラリであれば利用しても問題ありません）


CC BY-SA 4.0
2019-04-27T01:55:00.790
54511
2022-02-26T13:01:00.167
2019-05-11T09:48:58.933
76
34092
question
python3 windows-10 pygame
Pygameでの画像透過処理


[set_alpha](https://stackoverflow.com/a/30276322/8248751)でフェードアウトする方法がお手軽です。  
ちなみにテキストなどのフェードアウトは[special_flagsにBLEND_RGBA_MULTを指定する](https://stackoverflow.com/a/52856474/8248751)ため、サンプルコードへついでに載せました。

[code]

    import pygame as pg
    
    # Todo パス名を変更すること
    img_path = r"img\test.png"
    
    def main(img_path):
        clock = pg.time.Clock()
        screen = pg.display.set_mode((640, 480))
    
        # 画像初期化
        img_orig = pg.image.load(img_path).convert()
        colorkey = img_orig.get_at((0,0))               # 左上を透明色にする処理
        img_orig.set_colorkey(colorkey, pg.RLEACCEL)    # 左上を透明色にする処理
        img_surf = img_orig.copy()
        img_alpha = pg.Surface(img_surf.get_size(), pg.SRCALPHA)
    
        # テキスト初期化
        font = pg.font.SysFont(None, 64)
        blue = pg.Color('royalblue')
        txt_orig = font.render(u'Transparent.', True, blue)
        txt_surf = txt_orig.copy()
        txt_alpha = pg.Surface(txt_surf.get_size(), pg.SRCALPHA)
    
        alpha = 0
        isAdding = True
    
        while True:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    return
    
            screen.fill((30, 30, 30))
    
            # 画像描画
            img_alpha.fill((255, 255, 255, alpha), special_flags=pg.BLEND_RGBA_MULT)
            img_surf = img_orig.copy()
            img_surf.set_alpha(alpha)         # 透過処理
            img_surf.blit(img_alpha, (0, 0))
            screen.blit(img_surf, (10, 50))
    
            # テキスト描画
            txt_alpha.fill((255, 255, 255, 255 - alpha))
            txt_surf = txt_orig.copy()
            txt_surf.blit(txt_alpha, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
            screen.blit(txt_surf, (10, 10))
    
            pg.display.flip()
            clock.tick(30)
    
            # 透明度更新
            if isAdding:
                alpha += 5
            else:
                alpha -= 5
            if alpha <= 0 or alpha >= 255:
                isAdding = not isAdding
                alpha = max(min(alpha, 255), 0)
    
    if __name__ == '__main__':
        pg.init()
        main(img_path)
        pg.quit()
    
[/code]


CC BY-SA 4.0
2019-04-27T09:41:08.557
54519
2019-04-27T09:41:08.557
9820
54511
answer