在Python3中将图像复制到剪贴板

时间:2015-12-16 21:08:41

标签: python windows python-3.x clipboard

首先,关于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)

由于

4 个答案:

答案 0 :(得分:6)

您不希望StringIO在这里。图像是原始二进制数据,在Py3中,str纯粹用于文本bytesbytes - 类似对象(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)