2017-10-06 1 views
1

JPEG画像を読み込み、ビットマップに変換してwxアプリケーションにプロットすることができます。私はしかし、PIL画像オブジェクトをwxアプリケーションにプロットできるビットマップに変換するのは苦労しています。PIL画像をwxPythonビットマップ画像に変換する

オンライン、私は見つけることができる最善の提案は

wx.Bitmap(PIL_image.tobytes()) 

ような何かを行うことですが、これは私に次のエラーを与える

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 59: invalid start byte 

または

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 51: invalid continuation byte 

誰かAを有しこのポイントに対処する方法についてのヒント?ありがとう!

答えて

2

インターネット上で例を挙げて説明します。しかし、それらには含まれていないいくつかの条件があります。 特に、wxBitmap()をPIL Image()に変換するとき。

ここに私のこれらの機能の変更版を掲載します。変換は高速で信頼性があります。



from PIL import Image 
import wx 

def PIL2wx (image): 
    width, height = image.size 
    return wx.BitmapFromBuffer(width, height, image.tobytes()) 

def wx2PIL (bitmap): 
    size = tuple(bitmap.GetSize()) 
    try: 
     buf = size[0]*size[1]*3*"\x00" 
     bitmap.CopyToBuffer(buf) 
    except: 
     del buf 
     buf = bitmap.ConvertToImage().GetData() 
    return Image.frombuffer("RGB", size, buf, "raw", "RGB", 0, 1) 


# Suggested usage is to put the code in a separate file called 
# helpers.py and use it as this: 

from helpers import wx2PIL, PIL2wx 
from PIL import Image 

i = Image.open("someimage.jpg").convert("RGB") 
wxb = PIL2wx(i) 
# Now draw wxb to screen and let user draw something over it using wxDC() and so on... 
# Then pick a wx.Bitmap() from wx.DC() and do something like: 
wx2PIL(thedc.GetAsBitmap()).save("some new image.jpg") 

+0

それは、おかげで動作しますが、私はこのようにそれを修正する必要がありました: 'wx.Bitmap.FromBuffer返します(。(幅、高さ、image.convert( "RGB")をtobytes))' –

+0

がよろしいですBitmapとFromBufferの間に余分なドットを追加しなければならないということですか?それを確認するだけです。なぜなら、私がまだ気づいていない新しいバージョンのwxPythonにいくつかの変更が導入されているからです。 convert()については、まあ、申し訳ありません、私はそれを返すことを忘れました。現在のアプリケーションはデフォルトでRGBで動作するので、私はそれを削除したので、余分なconvert()の必要はありません。それが存在する場合、機能は広く使用可能になりますが、それ以外の場合は遅くなります。私はカメラから画像を準備するためにPILを使用しています。次に、wx.Panel()に描画します。だから、すべてのusecは貴重です。 – Dalen

+0

はい、変更されています。ドットがなければ、あなたはただの警告を得るだけです。 RGB変換について、私は理解しています。私はちょうどあなたの答えを読んで他の人にとって有用かもしれないので、それにコメントしました。 –

関連する問題