Преобразование из wxImage в образ PIL и наоборот в Python3.7 - PullRequest
0 голосов
/ 08 января 2019

После перехода с Python2.7 на Python3.7 методы преобразования, которые я нашел в Интернете, больше не работают.

Я попробовал несколько предложений. Каждый раз, когда библиотека изображений PIL выдает ошибку:

... site-pacakges \ PIL \ Image.py ", строка 812, в frombytes s = d.decode (data) TypeError: аргумент 1 должен быть байтовым объектом только для чтения, а не bytearray

def WxImageToPilImage1( myWxImage ):  
    """Convert wx.Image to PIL Image."""
    width, height = myWxImage.GetSize()
    data = myWxImage.GetData()

    red_image = Image.new("L", (width, height))
    red_image.frombytes(data[0::3])
    green_image = Image.new("L", (width, height))
    green_image.frombytes(data[1::3])
    blue_image = Image.new("L", (width, height))
    blue_image.frombytes(data[2::3])

    if myWxImage.HasAlpha():
        alpha_image = Image.new("L", (width, height))
        alpha_image.frombytes(myWxImage.GetAlphaData())
        myPilImage = Image.merge('RGBA', (red_image, green_image,    blue_image, alpha_image))
    else:
        myPilImage = Image.merge('RGB', (red_image, green_image, blue_image))
    return myPilImage

def WxImageToPilImage2( myWxImage ):
    myPilImage = Image.new( 'RGB', (myWxImage.GetWidth(), myWxImage.GetHeight()) )
    myPilImage.frombytes( myWxImage.GetData() )
    return myPilImage

1 Ответ

0 голосов
/ 09 января 2019

Я вообще не использую wxPython, но, похоже, это работает:

import wx

app = wx.PySimpleApp()
wxim = wx.Image('start.png', wx.BITMAP_TYPE_ANY)

w = wxim.GetWidth()
h = wxim.GetHeight()
data = wxim.GetData()

red_image   = Image.frombuffer('L',(w,h),data[0::3])
green_image = Image.frombuffer('L',(w,h),data[1::3])
blue_image  = Image.frombuffer('L',(w,h),data[2::3])
myPilImage = Image.merge('RGB', (red_image, green_image, blue_image))
...