Код 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)