Python 是否将图像复制到剪贴板?

Python 是否将图像复制到剪贴板?,python,windows,python-3.x,clipboard,Python,Windows,Python 3.x,Clipboard,首先,关于SO的问题引出了答案,这只适用于Python 2.x我试过了,但没用。我克服了一个问题,但遇到了另一个问题: TypeError: string argument expected, got 'bytes' 因此,我们再次向Python3提出同样的问题——如何在Python3中将图像复制到剪贴板?以下是我目前掌握的代码: from io import StringIO import win32clipboard from PIL import Image def send_to_c

首先,关于SO的问题引出了答案,这只适用于Python 2.x我试过了,但没用。我克服了一个问题,但遇到了另一个问题:

TypeError: string argument expected, got 'bytes'
因此,我们再次向Python3提出同样的问题——如何在Python3中将图像复制到剪贴板?以下是我目前掌握的代码:

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)

谢谢

您不需要这里的
StringIO
。图像是原始二进制数据,在Py3中,
str
纯粹用于文本,
bytes
bytes
-类似对象(
bytearray
,连续
memoryview
s,
mmap
s)用于二进制数据。要替换二进制数据的Py2的
StringIO.StringIO
,您需要在Python 3中使用
io.BytesIO
,而不是
io.StringIO

,您可以使用winclip32将位图图像复制到剪贴板 安装:

副本:


对于那些想要复制粘贴的人

# 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()

我复制了代码并用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)

使用pillow和PyWin32 219在Windows 7上进行测试,并且在BytesIO@MikeDriscoll:谢谢你的确认。我将删除限定的语言。格式必须为BMP,任何人都要获得不同的格式
# 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()
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)