在Linux中用Python将图像复制到剪贴板

3 投票
2 回答
4017 浏览
提问于 2025-04-16 03:19

我试过用gtk的方法,但速度很慢,而且处理一个“比较大”的图片(120KB)时根本不行。

import pygtk
pygtk.require('2.0')
import gtk
import os
def copy_image(f):
    assert os.path.exists(f), "file does not exist"
    clipboard = gtk.clipboard_get()
    img = gtk.Image()
    img.set_from_file(f)
    clipboard.set_image(img.get_pixbuf())
    clipboard.store()

我还试过xclip,它只能处理文本,那还有什么其他的选择呢?Ubuntu用的是什么呢?

2 个回答

1

你可能想用set_with_data这个方法,不过这稍微复杂一点(图像数据只有在应用程序请求时才会发送,所以需要一些回调函数)。这样做在同一个应用程序中粘贴时会有一些好处,而不是粘贴到其他应用程序中。

3

获取和发送剪贴板上的文本,有一种方法是使用 XSel。这个工具看起来不太好,而且需要和一个外部程序进行沟通。不过,它的确能工作,而且速度挺快的。

我不确定这是不是最好的解决方案,但我知道它是有效的 :)

[编辑]你说得对,xsel 似乎不支持图片。

那么,我们可以考虑一个稍微修改过的 GTK 版本。

def copy_image(f):
    assert os.path.exists(f), "file does not exist"
    image = gtk.gdk.pixbuf_new_from_file(f)

    clipboard = gtk.clipboard_get()
    clipboard.set_image(image)
    clipboard.store()

请注意,如果你的程序因为某种原因立刻退出,可能需要更改所有者,因为 X 系统是这样管理剪贴板的。

撰写回答