通过X11剪贴板将{Pillow图像复制到GIMP

时间:2015-12-23 01:19:27

标签: image tkinter python-imaging-library clipboard x11

我正在使用Xubuntu 14.04(X11 / Linux发行版)。我使用Pillow(Python Imaging Library)和Tkinter库编写了一个Python程序,使用自定义位图字体将用户输入的文本呈现为图像。我想快速将此图像作为新图层添加到正在运行的GIMP流程中。目前,它通过将图像保存为PNG文件然后要求用户使用GIMP的文件选择器挖掘PNG文件来进行操作。我认为如果我可以将图像保存到X11剪贴板以便将其粘贴到GIMP中会更方便。

但我通过Google找到的所有examples for interacting with the clipboard in Tkinter都是用于文字,而不是图片。我找到了如何在Windows中复制图像(12):将BMP文件保存到BytesIO,切掉前14个字节,然后将其余部分发送到Windows剪贴板作为CF_DIB。但我不想要葡萄酒。还存在answer about how to do it in GTK+;是否值得将应用程序从Tkinter移植到PyGTK(用于GTK + 2)或PyGObject(用于GTK + 3),尽管它可能会导致Windows用户使用installation headache?或者是否有比X11剪贴板更简单的方法来将PIL.Image.Image实例导入GIMP?

1 个答案:

答案 0 :(得分: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或用户指定接收的任何其他程序,以及然后在创建新文件或应用程序关闭后销毁临时文件。