Image 通过X11剪贴板将枕头图像复制到GIMP

Image 通过X11剪贴板将枕头图像复制到GIMP,image,tkinter,python-imaging-library,clipboard,x11,Image,Tkinter,Python Imaging Library,Clipboard,X11,我使用的是Xubuntu 14.04(一个X11/Linux发行版)。我已经编写了一个Python程序,使用Pillow(Python图像库)和Tkinter库使用自定义位图字体将用户输入的文本渲染到图像中。我想把这个图像作为一个新的层快速地带到正在运行的GIMP进程中。目前,它的操作方式是将图像保存到PNG文件,然后要求用户使用GIMP的文件选择器去挖掘PNG文件。我想如果我可以将图像保存到X11剪贴板,以便将其粘贴到GIMP中,会更方便 但我能通过谷歌找到的所有信息都是针对文本的,而不是图像

我使用的是Xubuntu 14.04(一个X11/Linux发行版)。我已经编写了一个Python程序,使用Pillow(Python图像库)和Tkinter库使用自定义位图字体将用户输入的文本渲染到图像中。我想把这个图像作为一个新的层快速地带到正在运行的GIMP进程中。目前,它的操作方式是将图像保存到PNG文件,然后要求用户使用GIMP的文件选择器去挖掘PNG文件。我想如果我可以将图像保存到X11剪贴板,以便将其粘贴到GIMP中,会更方便


但我能通过谷歌找到的所有信息都是针对文本的,而不是图像。我找到了如何在Windows(,)中复制图像:将BMP文件保存到
字节
,切掉前14个字节,然后将其余的作为
CF_DIB
发送到Windows剪贴板。但我不想要酒。还存在一个;是否值得将应用程序从Tkinter移植到PyGTK(对于GTK+2)或PyGObject(对于GTK+3),尽管这可能会给Windows用户带来麻烦?或者有没有比X11剪贴板更容易的方法将
PIL.Image.Image
实例获取到GIMP中?

您可以使用其“远程”功能将图像发送到打开的GIMP进程。如果GIMP已经在运行,那么命令
GIMP path/to/file.png
将查找GIMP的窗口并保存。这意味着您可以使用
tempfile.TemporaryDirectory
创建一个文件夹,将图像保存到此文件夹中,然后在GIMP中打开它

tempfile.TemporaryDirectory
在Python 2中不可用
tempfile.NamedTemporaryFile
在较早版本的Python中可用,但在UNIX上,文件名可以传递给另一个程序,但在Windows上,临时文件在创建它的程序中打开时,其他程序无法打开,一旦创建它的程序将其关闭,它将已被删除。同时安装了Python2和Python3的Windows用户需要使用Python3.3或更高版本,以便让shebang line processor()选择适当的Python版本


或者,如果您不想依赖Python3.3或更高版本,您可以让程序检测它是否在Windows或POSIX上运行,然后使适当的操作可用。在Windows下,它会将图像复制到剪贴板,在POSIX下,它会将图像写入一个名为temporaryfile的tempfile.NamedTemporaryFile,将文件名传递给
gimp
或用户指定接收它的任何其他程序,然后在创建新文件或应用程序关闭后销毁临时文件。

看起来像是在Tk中将图像放入剪贴板,因此TkInter不受很好的支持。使用
clipboard get-type
(可以使用
clipboard get-type目标获取类型列表;image/png使用gimp创建的选项)。但是,尝试将相同的数据放回,gimp无法将其识别为图像。也许挖掘一些传统知识来源会有所帮助。