就像标题所说的那样,我想将整个 1920x1080 背景壁纸图像吞噬成一个可读的对象无论其上方当前有哪些窗口、面板、启动器等。
Python,因为我喜欢它,但我会尽力而为。我会用 C/C++。我宁愿不用 Java。拜托,不要用 Java。这是一个小工具,不是武器级的应用程序。
你为什么问?
我想从图像中查看几百个左右的随机像素,尝试找到一种常见的颜色,然后操作当前 gtk3 主题的 CSS 文件以将 @dark_bg_color 更改为我计算的颜色,然后,不知何故,重新加载主题。
最终的结果是,当壁纸改变时,窗口的标题栏颜色也会改变以“匹配”。
我很确定除了第 1 步之外,我可以做所有事情...将当前壁纸放入可读对象中。有很多关于如何更改/设置壁纸的教程,但关于获取壁纸的教程却不多。
哇,你说!你不知道你的桌面壁纸是什么吗?不。我用种类它总是下载新的壁纸并使用我的个人收藏,每 10 分钟左右随机更改一次。
答案1
这应该可以做到:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
from PIL import Image
from gi.repository import Gio
def get_wallpaper_uri():
settings = Gio.Settings.new("org.gnome.desktop.background")
uri = settings.get_string("picture-uri")
return uri
def uri_to_path(uri):
return uri.lstrip("file:")
def get_random_coordinates(x_max, y_max, num):
x_values = random.sample(range(x_max), num)
y_values = random.sample(range(y_max), num)
return zip(x_values, y_values)
def main():
uri = get_wallpaper_uri()
path = uri_to_path(uri)
image = Image.open(path)
width, height = image.size
coordinates = get_random_coordinates(width, height, 10)
pixels = image.load()
for coordinate in coordinates:
pixel_value = pixels[coordinate]
print(pixel_value)
if __name__ == "__main__":
main()
答案2
@Timo 上面描述了在 GNOME 和 Unity 中获取它的方法,这里是在 Xfce 中获取它的方法。
import subprocess
xfce_wall_cmd = subprocess.Popen('xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image', shell=True, stdout=subprocess.PIPE)
xfce_wall, xfce_wall_errs = xfce_wall_cmd.communicate()
xfce_wall = xfce_wall.decode('utf-8').replace('\n', '')
print(xfce_wall)