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

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

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

Почему, спросите вы?

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

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

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

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

0
задан 29 May 2016 в 22:02

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()
1
ответ дан 30 May 2016 в 08:02

@Timo выше описанного способ получить его в GNOME и Единице, вот то, как в 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)
0
ответ дан 30 May 2016 в 08:02

Другие вопросы по тегам:

Похожие вопросы: