Скопировать изображение в буфер обмена в 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
.