Копировать изображение в буфер обмена в Python3

прежде всего, вопрос на SO копировать изображение в буфер обмена в Python приводит к ответу запись изображения в буфер обмена Windows на python с помощью PIL и win32clipboard?, что было хорошо только для Python 2.X. - Я попробовал, но ничего не вышло. Я преодолел одну проблему:--7-->модули StringIO и cStringIO исчезли в Python 3.0:, но наткнулся на еще один:

TypeError: string argument expected, got 'bytes'

следовательно, повторите тот же вопрос снова для Python 3 -- Как скопировать изображение в буфер обмена в Python 3? Вот код, который я получил до сих пор:

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)

спасибо

1 ответов


не хочешь StringIO здесь. Изображения являются необработанными двоичными данными, а в Py3,str чисто для текста bytes и bytes-как объекты (bytearray, прилежащей memoryviews,mmaps) предназначены для двоичных данных. Заменить Py2 по StringIO.StringIO для двоичных данных вы хотите использовать io.BytesIO в Python 3, не io.StringIO.