Bilddaten -> win32 clipboard / zwischenablage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
arghargh
User
Beiträge: 81
Registriert: Donnerstag 4. September 2008, 22:26

Ich suche eine Möglichkeit, mit PIL erzeugte Bilddaten in die Windows-Zwischenablage zu bekommen, und zwar aus einem Konsolenprogramm.

Zu http://sourceforge.net/projects/pywin32/ finde ich an Doku nur
http://docs.activestate.com/activepytho ... board.html

Hmm, hier sind im Zusammenhang Bildformate erwähnt:

http://code.google.com/p/enso/source/br ... e.py?r=133

Und hier evtl. sogar die Lösung, allerdings kann ich kein Japanisch (Pythonisch auch nicht richtig):

http://d.hatena.ne.jp/ousttrue/20080125/1201280065

Vielleicht mit dem kombiniert:
http://www.pythonware.com/library/pil/h ... agewin.htm

Das probiere ich morgen mal aus.
arghargh
User
Beiträge: 81
Registriert: Donnerstag 4. September 2008, 22:26

Code: Alles auswählen

    win32clipboard.SetClipboardData(win32clipboard.CF_DIB, ImageWin.Dib(im))
TypeError: The object must support the buffer interfaces
Das ist mir leider zu hoch.

Andernfalls ist mir auch mit einem programm geholfen, dass eine bilddatei oder daten über pipe in die zwischenablage schreibt.

für powershell gibt es da wohl hilfreiche user-extensions, aber das hat nicht jeder.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dieser Code speichert zumindest etwas im Clipboard. Es kann aber von den gängigen Grafikprogrammen nicht gelesen werden.

Code: Alles auswählen

import Image, ImageWin
import win32clipboard
im = Image.open(dein_bild)
win32clipboard.OpenClipboard(0)
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_BITMAP, ImageWin.Dib(im).tostring())
win32clipboard.CloseClipboard()
Auch das speichern von BMP- oder TIFF-Dateien hat nicht weitergeholfen.
MfG
HWK
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

So funktioniert es:

Code: Alles auswählen

import cStringIO
import Image
import win32clipboard, win32ui
im = Image.open(dein_bild)
f = cStringIO.StringIO()
im.save(f, 'BMP')
f.seek(0)
bmp = win32ui.CreateBitmap()
bmp.LoadBitmapFile(f)
f.close()
win32clipboard.OpenClipboard(0)
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_BITMAP, bmp.GetHandle())
win32clipboard.CloseClipboard()
MfG
HWK
arghargh
User
Beiträge: 81
Registriert: Donnerstag 4. September 2008, 22:26

Super, danke!
Antworten