#Boa:Frame:Frame1 import wx import PIL from PIL import Image def create(parent): return Frame1(parent) [wxID_FRAME1] = [wx.NewId() for _init_ctrls in range(1)] class Frame1(wx.Frame): def _init_ctrls(self, prnt): wx.Frame.__init__(self, style=wx.DEFAULT_FRAME_STYLE, name='', parent=prnt, title='Frame1', pos=wx.Point(-1, -1), id=wxID_FRAME1, size=wx.Size(-1, -1)) def __init__(self, parent): self._init_ctrls(parent) wxim = wx.Image('logo.gif') bmp = wxim.ConvertToBitmap() # emulates necessary conversion in larger program wxim = bmp.ConvertToImage() ## wxim.ConvertAlphaToMask() # allows transparency to display ## wxim.InitAlpha() # later in wx.BitmapButton wxim.RotateHue(0.4) imageData = wxim.GetData() ## print imageData if wxim.HasAlpha(): # GIF files don't create an alpha channel, so this section is for reference print 'has alpha' alpha = wxim.GetAlphaData() i = 0 newImageData = '' for alphaVal in alpha: # map alpha values into RGB imageData to create RGBA newImageData i = i + 3 newImageData = newImageData + str(imageData[i-3:i]) + str(alphaVal) imagePIL = PIL.Image.fromstring('RGBA', (wxim.GetWidth(), wxim.GetHeight()), newImageData) imagePIL = imagePIL.convert('RGB') # because PIL.Image can't convert RGBA -> P else: imagePIL = PIL.Image.fromstring('RGB', (wxim.GetWidth(), wxim.GetHeight()), imageData) imagePIL = imagePIL.convert("P", dither=Image.NONE, palette=Image.ADAPTIVE) # prevent dithering imagePIL.info["transparency"] = 0 ## print imagePIL.info, imagePIL.mode imagePIL.save('logo2.gif', transparency=0) if __name__ == '__main__': app = wx.PySimpleApp() wx.InitAllImageHandlers() frame = create(None) ## frame.Show() ## ## app.MainLoop()