Código Python para GET (não definido) a imagem atual do papel de parede da área de trabalho

0

Como o título diz, eu gostaria de usar toda a imagem 1920x1080 em papel de parede plano de fundo em um objeto legível , independentemente de quais janelas, painéis, lançadores, etc. estejam atualmente em cima dele .

Python, porque eu gosto disso, mas vou pegar o que posso conseguir. Eu posso fazer C / C ++. Eu prefiro não fazer Java. Por favor, não o java. Este é um pequeno utilitário, não um aplicativo para uso em armas.

Por que, você pergunta?

Eu quero olhar para uns 100 pixels aleatórios da imagem, tentar encontrar uma cor comum, então manipular o arquivo CSS do tema gtk3 atual para mudar @dark_bg_color para minha cor calculada, e então, de alguma forma , recarregue o tema.

O resultado final será que, quando o papel de parede mudar, as cores da barra de título do Windows serão alteradas para "corresponder".

Tenho certeza de que posso fazer tudo, exceto a etapa 1 ... colocar o papel de parede atual em um objeto legível. Há muitos tutoriais sobre como alterar / definir o papel de parede, mas não muito sobre como obtê-lo.

Whoa, você diz! Você não sabe o que é seu papel de parede? Não. Eu uso variedade e ele está sempre fazendo o download de novos papéis de parede E usando minha coleção pessoal, alterando-a aleatoriamente a cada 10 minutos ou mais.

    
por Nick Chackowsky 29.05.2016 / 04:18

2 respostas

1

Isso deve ser feito:

#!/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()
    
por Timo 29.05.2016 / 13:00
0

@Timo acima descreveu a maneira de obtê-lo no GNOME e no Unity, eis como no 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)
    
por UniversallyUniqueID 30.05.2016 / 09:03