使用python,可以读取图像:
from PIL import Image, ImageTk
image = Image.open("test.jpg")
那么可以用以下方式给klipper写信:
import dbus
bus = dbus.SessionBus()
proxy = bus.get_object("org.kde.klipper","/klipper")
iface = dbus.Interface(proxy,"org.kde.klipper.klipper")
iface.setClipboardContents("text")
但是当我试着写刚打开的图片时,它说它不能接受它:
iface.setClipboardContents(image)
TypeError: Expected a string or unicode object
所以我的问题是:"如何使用python将图像放入klipper ?"
Image是一个原始的Python图像库对象。你需要找出
1) Klipper除了图像(不是文本)之外的输入格式是什么
2)如何将图像序列化为这种格式。您不传递Python图像对象,但可能会将保存的数据(PNG文件数据)传递给Klipper。
找到了一些解决方案-不是用python而是用bash,并且它不适用于远程图片-仅适用于本地图片(因为gwenview)。下面是一个bash脚本:
#!/bin/bash
cd /home/boris/Downloads/
name=`ls -t1 | head -1`
gwenview $name &
sleep 3
id=`ps -e | grep gwenview | awk '{print $1}'`
qdbus org.kde.gwenview-$id /gwenview/MainWindow_1/actions/edit_copy trigger
sleep 3
kill $id
当然,这也可以用python来完成,但由于我是进行系统调用,而不是在图片中读取-因此没有必要使用python。
解释一下——假设你下载了一个图片到~/Downloads。然后,如果你运行这个脚本,它会在那里找到最新的文件,用gwenview打开它,把它复制到剪贴板(!),然后关闭gwenview。
我想要正常工作-没有其他格温可以运行。如果你想使用它,最好将脚本绑定到一个热键。
我正在寻找这样一个脚本的原因-是因为我想切换到键盘驱动的网络浏览器(如Conkeror或Pentadactyl) -它允许快速保存图像-而我主要需要将其粘贴到一些。odt文件)。
这个脚本可以进一步成为一个守护进程——它将监视下载目录。但现在我要写一个脚本,将下载图像,并把剪贴板自动-请参阅我的下一个问题。
查找qdbus命令的方法是打开
qdbusviewer
找到你需要的应用程序,然后是你需要的命令,然后调用类似的操作,例如锁定屏幕:
qdbus org.kde.krunner /ScreenSaver Lock