2015-12-23 136 views
2

我使用Xubuntu 14.04(X11/Linux發行版)。我已經使用Pillow(Python Imaging Library)和Tkinter庫編寫了一個Python程序,使用自定義位圖字體將用戶輸入的文本呈現爲圖像。我想快速將這個圖像作爲一個新圖層加入正在運行的GIMP過程。目前,它通過將圖像保存爲PNG文件,然後要求用戶使用GIMP的文件選取器去挖掘PNG文件來進行操作。我認爲如果我可以將圖像保存到X11剪貼板中以便將其粘貼到GIMP中會更方便。通過X11剪貼板將枕頭圖像複製到GIMP

但我可以通過Google找到的所有examples for interacting with the clipboard in Tkinter都是用於文本而不是圖片。我發現如何在Windows中複製圖像(1,2):將BMP文件保存到BytesIO,砍掉前14個字節,然後將剩餘的文件作爲CF_DIB發送到Windows剪貼板。但我不想要葡萄酒。還有一個answer about how to do it in GTK+;是否值得將Tkinter的應用程序移植到PyGTK(對於GTK + 2)或PyGObject(對於GTK + 3),儘管它可能對Windows用戶造成installation headache?或者是否有比X11剪貼板更簡單的方式將PIL.Image.Image實例放入GIMP中?

+0

它看起來像將圖像放到Tk的剪貼板中,因此TkInter沒有得到很好的支持。您可以通過'剪貼板獲取類型'輕鬆獲取*圖像數據(類型列表可以通過'剪貼板獲取類型TARGETS'獲得;圖像/ png可以與由gimp創建的選項一起使用)。但請嘗試重新輸入相同的數據,並且gimp無法將其識別爲圖像。也許一些挖掘Tk的來源將有所幫助。 –

回答

1

您可以使用其「遠程」功能將圖像發送到打開的GIMP進程。如果GIMP已在運行,則命令gimp path/to/file.png將找到GIMP的窗口並且drops the image into the running process。這意味着您可以使用tempfile.TemporaryDirectory創建一個文件夾,將圖像保存到該文件夾​​中,然後在GIMP中打開它。

tempfile.TemporaryDirectorynew in Python 3.2和不適在Python 2 tempfile.NamedTemporaryFile是在舊版本的Python可用,但tempfile module docs狀態在UNIX上,文件名可以傳遞到另一個程序,但在Windows上,臨時文件無法打開當其他程序在創建它的程序中打開時,一旦創建它的程序關閉它,它就會被刪除。安裝了Python 2和Python 3的Windows用戶需要使用Python 3.3或更高版本才能讓shebang行處理器(PEP 397)選擇合適的Python版本。

或者,如果您不想依賴於Python 3.3或更高版本,則可以讓程序檢測它是在Windows還是POSIX上運行,然後執行相應的操作。在Windows下,它將圖像複製到剪貼板,在POSIX下,它會將圖像寫入tempfile.NamedTemporaryFile,將文件名傳遞到gimp或用戶指定接收它的任何其他程序,然後銷燬臨時文件一次一個被創建或應用程序關閉。