首先,关于SO copy image to clipboard in python的问题导致回答Write image to Windows clipboard in python with PIL and win32clipboard?,这对Python 2.x只有好处。 - 我尝试过它并没有奏效。我克服了一个问题:StringIO and cStringIO modules are gone in 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)
由于
答案 0 :(得分:6)
您不希望StringIO
在这里。图像是原始二进制数据,在Py3中,str
纯粹用于文本bytes
和bytes
- 类似对象(bytearray
,连续memoryview
s,{ {1}} s)用于二进制数据。要替换二进制数据的Py2 mmap
,您希望在Python 3中使用StringIO.StringIO
,而不是io.BytesIO
。
答案 1 :(得分:3)
我确实复制了代码,并用BytesIO替换了StringIO并成功了! (带有* .jpg和* .png文件)非常感谢!
from io import BytesIO
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 = 'Ico2.png'
image = Image.open(filepath)
output = BytesIO()
image.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()
send_to_clipboard(win32clipboard.CF_DIB, data)
答案 2 :(得分:1)
对于那些想要复制粘贴的人
# parameter must be a PIL image
def send_to_clipboard(image):
output = BytesIO()
image.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
答案 3 :(得分:0)
您可以使用winclip32将位图图像复制到剪贴板 安装:
pip install winclip32
副本:
import winclip32
winclip32.set_clipboard_data(winclip32.BITMAPINFO_STD_STRUCTURE, your_binary_here)