使用PIL和win32clipboard在python中将图像写入Windows剪贴板?

时间:2011-08-13 12:35:26

标签: python python-imaging-library pywin32

我正在尝试打开图像文件并将图像复制到Windows剪贴板。有没有办法解决这个问题:

import win32clipboard
from PIL import Image

def send_to_clipboard(clip_type, data): 
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(clip_type, data) 
    win32clipboard.CloseClipboard()

clip_type = win32clipboard.CF_BITMAP
filepath = 'c:\\temp\\image.jpg'

im = Image.open(filepath) 
data = im.tobitmap() # fails with valueerror: not a bitmap
# data = im.tostring() runs, but receiving programs can't read the results
send_to_clipboard(clip_type, data)

我可以安装PythonMagick等,但不希望为一次性程序安装另一个库

2 个答案:

答案 0 :(得分:8)

from cStringIO 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 :(得分:1)

BMP的文件头偏移量为14个字节。那么,BMP也被称为设备无关位图(DIB)文件格式,所以你不必担心神奇的数字14。

仅供参考,它确实需要一个Windows剪贴板API。因此,您可以使用BMP,但无法使用

image.convert("RGB").save(output, "PNG")
data = output.getvalue()[8:]

即使你知道PNG的偏移是8。