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

2024-05-14 18:49:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试打开一个图像文件并将该图像复制到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等,但不希望为一次性程序安装另一个库


Tags: to图像imageimportsenddataclipwindows
2条回答
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)

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

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

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

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

相关问题 更多 >

    热门问题