2015-12-16 46 views
5

Her şeyden önce, SO copy image to clipboard in python soru sadece Python 2.x için iyi olan Write image to Windows clipboard in python with PIL and win32clipboard?, yanıt yol açar. - Denedim ve işe yaramadı. Bir sorunun üstesinden: StringIO and cStringIO modules are gone in Python 3.0:, ancak başka birine çarptı:Görüntüyü Panoya kopyala Python3

Dolayısıyla
TypeError: string argument expected, got 'bytes' 

, yeniden soran Python 3 için tekrar aynı soruyu - Nasıl Python 3'te görüntü panoya kopyalamak için?

from io import StringIO 
import win32clipboard 
from PIL import Image 

def send_to_clipboard(clip_type, data): 
    win32clipboard.OpenClipboard() 
    win32clipboard.EmptyClipboard() 
    win32clipboard.SetClipboardData(clip_type, data) 
    win32clipboard.CloseClipboard() 

filepath = 'image.jpg' 
image = Image.open(filepath) 

output = StringIO() 
image.convert("RGB").save(output, "BMP") 
data = output.getvalue()[14:] 
output.close() 

send_to_clipboard(win32clipboard.CF_DIB, data) 

Teşekkür

cevap

4

Burada StringIO istemiyoruz: Ben bugüne kadar var koddur. Görüntüler ham ikili veridir ve Py3'te, str sadece metin içindir, bytes ve bytes benzeri nesneler (bytearray, bitişik memoryview s, mmap s) ikili veriler içindir. Py2'nin ikili veri için StringIO.StringIO'u değiştirmek için, io.StringIO numaralı Python 3'te io.BytesIO'u kullanmak istiyorsunuz.

+3

Yastık ve PyWin32 219 ile Windows 7'de test edildi ve BytesIO –

+0

@MikeDriscoll ile iyi çalıştı: Doğrulama için teşekkürler. Nitelikli dili kaldıracağım. – ShadowRanger