Copia la imagen al portapapeles en Python3

En primer lugar, la pregunta sobre la copia de SO de la imagen al portapapeles en python lleva a responder ¿ Escribe la imagen en el portapapeles de Windows en python con PIL y win32clipboard? , que solo era bueno para Python 2.x. – Lo intenté y no funcionó. Superé un problema: los módulos StringIO y cStringIO han desaparecido en Python 3.0:, pero chocaron con otro:

TypeError: string argument expected, got 'bytes' 

Por lo tanto, vuelve a hacer la misma pregunta para Python 3 – ¿Cómo copiar una imagen al portapapeles en Python 3? Aquí está el código que tengo hasta ahora:

 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) 

Gracias

No quieres a StringIO aquí. Las imágenes son datos binarios sin procesar, y en Py3, str es solo para texto, bytes y objetos similares a bytes ( bytearray , contiguo memoryview s, mmap s) son para datos binarios. Para reemplazar StringIO.StringIO de StringIO.StringIO por datos binarios, desea utilizar io.BytesIO en Python 3, no io.StringIO .