Код Python для получения (не задано) текущего изображения рабочего стола

Как следует из названия, я бы хотел добавить все фоновое изображение 1920x1080 в читаемый объект независимо от того, какие окна, панели, средства запуска и т. Д. В настоящее время могут быть поверх него.

Питон, потому что мне это нравится, но я возьму то, что смогу получить. Я могу сделать C/C++. Я бы предпочел не заниматься Java. Пожалуйста, не Java. Это небольшая утилита, а не оружейное приложение.

Почему ты спрашиваешь?

Я хочу посмотреть на пару или около того случайных пикселей из изображения, попытаться найти общий цвет, затем изменить CSS-файл текущей темы gtk3, чтобы изменить @dark_bg_color на мой расчетный цвет, и затем каким-то образом перезагрузить тему.

Окончательный результат заключается в том, что при смене обоев цвета строки заголовка окна изменятся на "совпадают".

Я почти уверен, что могу сделать все, кроме шага 1... превратить текущие обои в читаемый объект. Есть много уроков о том, как изменить / установить обои, но не так много, как их получить.

Вау, ты говоришь! Вы не ЗНАЕТЕ, что ваши обои для рабочего стола? Нет. Я использую разнообразие, и оно всегда загружает новые обои И использует мою личную коллекцию, меняя ее случайным образом каждые 10 минут или около того.

2 ответа

Решение

Это должно сделать это:

#!/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()

@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)
Другие вопросы по тегам