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

Прежде всего, вопрос о SO копировать изображение в буфер обмена в python приводит к отвечу Запись изображения в буфер обмена Windows в python с PIL и win32clipboard?, что было полезно только для Python 2.x. - Я попробовал, и это не сработало. Я преодолел одну проблему: Модули 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, смежные memoryview s, mmap s) для двоичных данных. Чтобы заменить Py2 StringIO.StringIO для двоичных данных, вы хотите использовать io.BytesIO в Python 3, а не io.StringIO.