获取(不设置)当前桌面壁纸图像的 Python 代码

获取(不设置)当前桌面壁纸图像的 Python 代码

就像标题所说的那样,我想将整个 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)

相关内容