2015-12-16 36 views
5

Prima di tutto, la domanda su SO copy image to clipboard in python porta a rispondere a Write image to Windows clipboard in python with PIL and win32clipboard?, che andava bene solo per Python 2.x. - L'ho provato e non ha funzionato. Ho superato un problema: StringIO and cStringIO modules are gone in Python 3.0:, ma imbattei in un altro:Copia l'immagine negli appunti in Python3

TypeError: string argument expected, got 'bytes' 

Quindi, nuovamente la stessa domanda ancora per Python 3 - Come copiare un'immagine negli appunti in Python 3? Qui è il codice che ho finora:

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) 

Grazie

risposta

4

Tu non vuoi StringIO qui. Le immagini sono dati binari non elaborati e in Py3, str è puramente per testo, gli oggetti bytes e bytes -like (bytearray, contigui memoryview s, mmap s) sono per dati binari. Per sostituire StringIO.StringIO di Py2 per dati binari, si desidera utilizzare io.BytesIO in Python 3, non io.StringIO.

+3

Testato su Windows 7 con cuscino e PyWin32 219 e ha funzionato bene con BytesIO –

+0

@MikeDriscoll: Grazie per la conferma. Rimuoveremo la lingua qualificata. – ShadowRanger