Записать изображение в буфер обмена Windows в python с PIL и win32clipboard? - PullRequest
4 голосов
/ 13 августа 2011

Я пытаюсь открыть файл изображения и скопировать изображение в буфер обмена 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 ]

8 голосов
/ 13 августа 2011
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 голос
/ 08 июля 2014

Смещение заголовка файла BMP составляет 14 байтов.Ну, BMP также известен как формат файла , не зависящий от устройства * DIB, поэтому вам не нужно беспокоиться о магическом числе 14.

FYI, ему нужны окнаAPI буфера обмена.Следовательно, вы можете использовать BMP, но не можете использовать

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

, даже если вы знаете, что смещение равно 8 для PNG.

...