Comment configurer un fond d'écran à défilement latéral?

10

Je veux que mon fond d'écran soit un défilement latéral de Super Mario World Yoshi's Island 1 . Une fois que le papier peint défilait complètement, il recommençait en boucle de manière transparente.

Existe-t-il un programme, ou XML, qui pourrait accomplir cela pour moi? J'utilise GNOME Shell.

Soren
la source
6
Donc . . . vous voulez essentiellement un fond d'écran animé?
Sergiy Kolodyazhnyy
Il est animé, mais je n'ai rien trouvé qui puisse le faire défiler sur le côté.
Soren
3
Ce que je pense peut être fait est de diviser cette image en plusieurs "instantanés" et d'utiliser un fichier XML pour configurer des transitions avec une période de temps définie. Ainsi, ce sera un peu comme dans les anciens jeux sur console, où vous avez une "vue", puis vous traversez la frontière et une autre vue apparaît à l'écran, et ainsi de suite. Vous pensez que ce serait une bonne idée?
Sergiy Kolodyazhnyy
2
Je pense à écrire un script pour ça. Cela pourrait me prendre quelques jours. Je vous ferai savoir une fois que j'aurai trouvé un code de travail, OK?
Sergiy Kolodyazhnyy
1
Je transmettrais cette demande au développeur de XScreenSaver. Cela ressemble à une merveilleuse idée que j'espère que le développeur considérera. Ce ne serait pas du papier peint comme vous l'avez demandé mais c'est une solution alternative pour satisfaire vos "envies graphiques". De même, le dossier ones / Pictures peut être mis en file d'attente de cette façon pour faire défiler également. J'aime vraiment ta demande!
WinEunuuchs2Unix

Réponses:

4

Mise à jour 22/10/16

Le script a été mis à jour pour correspondre aux exigences de cette question: /ubuntu//a/840381/295286

La transition et la durée ont été rendues facultatives et ont des valeurs par défaut. -sL'option est également ajoutée pour le dimensionnement des fonds d'écran (identique aux options Tile, Scale, Stretch des paramètres système).


Tout comme je l'ai dit dans les commentaires, vous devrez couper l'image en morceaux de taille égale ou superposés et créer un diaporama pour elle. Je ne connais pas la licence de cette image spécifique que vous voulez, alors je vous laisse le soin de la couper ( indice ).

Cependant, voici un script générateur de fond d'écran animé que j'ai écrit. L'utilisation est très simple. Comme indiqué par l' -hoption:

usage: xml_wallpaper_maker.py [-h] -d DIRECTORY -t TRANSITION -l LENGTH [-o]

Serg's XML slideshow creator

optional arguments:
  -h, --help            show this help message and exit
  -d DIRECTORY, --directory DIRECTORY
                        Directory where images stored
  -t TRANSITION, --transition TRANSITION
                        transition time in seconds
  -l LENGTH, --length LENGTH
                        Time length in seconds per image
  -o, --overlay         Enables use of overlay transition

Exemple:

./xml_wallpaper_maker.py -d Pictures/My_SideScroller_Images/ -t 5 -l 10 

Code source

Aussi disponible sur GitHub

#!/usr/bin/env python3
# -*- coding: utf-8 -*- 

#
# Author: Serg Kolo , contact: [email protected]
# Date: September 2 , 2016
# Purpose: A program that creates and launches XML slideshow
#      
# Tested on: Ubuntu 16.04 LTS
#
#
# Licensed under The MIT License (MIT).
# See included LICENSE file or the notice below.
#
# Copyright © 2016 Sergiy Kolodyazhnyy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.


from gi.repository import Gio
import xml.etree.cElementTree as ET
import lxml.etree as etree
import argparse
import sys
import os

def gsettings_set(schema, path, key, value):
    """Set value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema, path)
    if isinstance(value,list ):
        return gsettings.set_strv(key, value)
    if isinstance(value,int):
        return gsettings.set_int(key, value)
    if isinstance(value,str):
        return gsettings.set_string(key,value)

def parse_args():
        """ Parses command-line arguments """
        arg_parser = argparse.ArgumentParser(
        description='Serg\'s XML slideshow creator',
        )

        arg_parser.add_argument(
                                '-d', '--directory',
                                help='Directory where images stored',
                                type=str,
                                required=True
                                )

        arg_parser.add_argument(
                                '-t','--transition', 
                                type=float,
                                help='transition time in seconds',
                                required=True
                                )


        arg_parser.add_argument(
                                '-l','--length', 
                                type=float,
                                help='Time length in seconds per image',
                                required=True
                                )

        arg_parser.add_argument(
                                '-o','--overlay', 
                                action='store_true',
                                help='Enables use of overlay transition',
                                required=False
                                )
        return arg_parser.parse_args()



def main():
    """ Program entry point"""
    args = parse_args()
    xml_file = os.path.join(os.path.expanduser('~'),'.local/share/slideshow.xml')
    path = os.path.abspath(args.directory)
    duration = args.length
    transition_time = args.transition

    if not os.path.isdir(path):
       print(path," is not a directory !")
       sys.exit(1)

    filepaths = [os.path.join(path,item) for item in os.listdir(path) ]
    images = [ img for img in filepaths if os.path.isfile(img)]
    filepaths = None
    images.sort()
    root = ET.Element("background")
    previous = None

    # Write the xml data of images and transitions
    for index,img in enumerate(images):

        if index == 0:
           previous = img
           continue

        image = ET.SubElement(root, "static")
        ET.SubElement(image,"duration").text = str(duration)
        ET.SubElement(image,"file").text = previous

        if args.overlay: 
            transition = ET.SubElement(root,"transition",type='overlay')
        else:
            transition = ET.SubElement(root,"transition")
        ET.SubElement(transition,"duration").text = str(transition_time)
        ET.SubElement(transition, "from").text = previous
        ET.SubElement(transition, "to").text = img

        previous = img

    # Write out the final image
    image = ET.SubElement(root, "static")
    ET.SubElement(image,"duration").text = str(duration)
    ET.SubElement(image,"file").text = previous

    # Write out the final xml data to file
    tree = ET.ElementTree(root)
    tree.write(xml_file)

    # pretty print the data
    data = etree.parse(xml_file)
    formated_xml = etree.tostring(data, pretty_print = True)
    with open(xml_file,'w') as f:
        f.write(formated_xml.decode())

    gsettings_set('org.gnome.desktop.background',None,'picture-uri','file://' + xml_file)

if __name__ == '__main__':
    main()
Sergiy Kolodyazhnyy
la source
Savez-vous comment découper par programme une image en n* nmorceaux, en vous déplaçant le long des npixels x et des npixels y à chaque coupe? Par exemple, la commande pour le fond d'écran YI1 serait command 1920 1080 1 0et elle se bouclerait sur elle-même?
Soren
@moo_we_all_do en fait, cela a déjà été demandé: askubuntu.com/a/143501/295286
Sergiy Kolodyazhnyy
donc pour boucler je prendrais les 1920 premiers pixels et les copierais à l'arrière?
Soren
@moo_we_all_do que voulez-vous dire par boucle? Ce que vous devez faire est de diviser cette image en parties paires, de les placer dans un dossier et d'indiquer simplement le chemin du script vers ce dossier. Le fond d'écran xml passera automatiquement et
rebouclera
Par boucle, je veux dire défilement, et je l'ai compris, merci! : D
Soren