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