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
.