Come posso impostare uno sfondo a scorrimento laterale?


10

Voglio che il mio sfondo sia uno scorrimento laterale di Super Mario World Yoshi's Island 1 . Una volta che lo sfondo scorreva fino in fondo, tornava senza interruzioni all'inizio.

Esiste un programma, o XML, che mi farebbe questo? Sto usando GNOME Shell.


6
Così . . . vuoi fondamentalmente avere uno sfondo animato?
Sergiy Kolodyazhnyy,

È animato, ma non sono riuscito a trovare nulla che potesse farlo scorrere lateralmente.
Soren,

3
Quello che penso si possa fare è dividere quell'immagine in più "istantanee" e usare un file XML per impostare le transizioni con un periodo di tempo prestabilito. In questo modo, sarà un po 'come nei vecchi giochi per console, in cui hai una "vista", poi attraversi il confine e un'altra vista appare sullo schermo e così via. Pensi che sarebbe una buona idea?
Sergiy Kolodyazhnyy,

2
Sto pensando di scrivere una sceneggiatura per questo. Potrebbe volermi un paio di giorni. Ti farò sapere una volta che avrò un codice funzionante, ok?
Sergiy Kolodyazhnyy,

1
Passerei questa richiesta allo sviluppatore di XScreenSaver. Sembra un'idea meravigliosa che spero lo sviluppatore prenderebbe in considerazione. Non sarebbe carta da parati come richiesto, ma è una soluzione alternativa per soddisfare i tuoi "desideri grafici". Allo stesso modo anche le cartelle / Immagini possono essere messe in coda in questo modo per scorrere. Mi piace molto la tua richiesta!
WinEunuuchs2Unix,

Risposte:


4

Aggiornamento 22/10/16

Lo script è stato aggiornato per soddisfare i requisiti in questa domanda: https://askubuntu.com/a/840381/295286

La transizione e la durata sono state rese opzionali e con valori predefiniti. -sè stata aggiunta anche l'opzione per il dimensionamento degli sfondi (come le opzioni Affianca, Scala, Allunga dalle Impostazioni di sistema).


Proprio come ho detto nei commenti, dovresti tagliare l'immagine in pezzi di dimensioni pari o sovrapposte e creare una presentazione per esso. Non conosco la licenza di quella specifica immagine che desideri, quindi la lascerò a te per tagliarla ( Suggerimento ).

Tuttavia, ecco uno script di generatore di sfondi animati che ho scritto. L'utilizzo è molto semplice. Come mostrato -hdall'opzione:

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

Esempio:

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

Codice sorgente

Disponibile anche su GitHub

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

#
# Author: Serg Kolo , contact: 1047481448@qq.com
# 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()

Sai come tagliare a livello di codice un'immagine in n* npezzi, spostandosi lungo i npixel xe i npixel y ad ogni taglio? Ad esempio, il comando per lo sfondo YI1 sarebbe command 1920 1080 1 0e sarebbe in loop su se stesso?
Soren,

@moo_we_all_do in realtà, questo è stato chiesto prima: askubuntu.com/a/143501/295286
Sergiy Kolodyazhnyy

quindi per girare in giro prenderei i primi 1920 pixel e lo copierei sul retro?
Soren,

@moo_we_all_do cosa intendi per loop-around? Quello che devi fare è dividere l'immagine in parti pari, metterle nella cartella e dire semplicemente il percorso dello script a quella cartella. Lo sfondo XML passerà automaticamente alla
sequenza precedente

Per loop intendo scroll, e l'ho capito, grazie! : D
Soren,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.