Bagaimana cara mengatur wallpaper gulir samping?

10

Saya ingin wallpaper saya menjadi gulir samping dari Pulau Super Mario World Yoshi 1 . Setelah wallpaper digulirkan sepenuhnya, itu akan mulus kembali ke awal.

Apakah ada program, atau XML, yang akan mencapai ini untuk saya? Saya menggunakan GNOME Shell.

Soren
sumber
6
Jadi . . Anda pada dasarnya ingin memiliki wallpaper animasi?
Sergiy Kolodyazhnyy
Ini beranimasi, tetapi saya tidak dapat menemukan apa pun yang dapat membuatnya menggulir samping.
Soren
3
Apa yang saya pikir dapat dilakukan adalah untuk membagi gambar itu menjadi beberapa "snapshots" dan menggunakan file XML untuk mengatur transisi dengan periode waktu yang ditetapkan. Jadi dengan begitu, itu akan seperti di game konsol lama, di mana Anda memiliki satu "tampilan" lalu Anda melintasi batas dan tampilan lain muncul di layar, dan seterusnya. Pikirkan itu ide yang bagus?
Sergiy Kolodyazhnyy
2
Saya sedang berpikir untuk menulis naskah untuk itu. Mungkin butuh saya beberapa hari. Saya akan memberi tahu Anda begitu saya membuat beberapa kode yang berfungsi, oke?
Sergiy Kolodyazhnyy
1
Saya akan meneruskan permintaan ini ke pengembang XScreenSaver. Kedengarannya seperti ide bagus yang saya harap akan dipertimbangkan pengembang. Ini tidak akan menjadi wallpaper seperti yang Anda minta tetapi merupakan solusi alternatif untuk memuaskan "keinginan grafis" Anda. Demikian pula folder Pictures / dapat di-antrian dengan cara ini untuk menggulir juga. Saya sangat suka permintaan Anda!
WinEunuuchs2Unix

Jawaban:

4

Perbarui 10/22/16

Skrip telah diperbarui agar sesuai dengan persyaratan dalam pertanyaan ini: /ubuntu//a/840381/295286

Transisi dan durasi dibuat opsional dan memiliki nilai default. -sopsi juga ditambahkan untuk ukuran wallpaper (sama seperti Tile, Scale, Stretch option dari System Settings).


Sama seperti yang saya katakan di komentar, Anda harus memotong gambar menjadi potongan berukuran rata atau tumpang tindih dan membuat tayangan slide untuk itu. Saya tidak tahu lisensi dari gambar spesifik yang Anda inginkan, jadi saya akan menyerahkannya kepada Anda untuk memotongnya ( Petunjuk ).

Namun, berikut adalah skrip generator wallpaper animasi yang telah saya tulis. Penggunaannya sangat sederhana. Seperti yang ditunjukkan oleh -hopsi:

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

Contoh:

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

Kode sumber

Juga tersedia di 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
sumber
Apakah Anda tahu cara pemrograman memotong gambar menjadi potongan-potongan n* n, bergerak sepanjang npiksel x dan npiksel y pada setiap pemotongan? Misalnya, perintah untuk wallpaper YI1 akan command 1920 1080 1 0dan akan berulang dengan sendirinya?
Soren
@moo_we_all_do sebenarnya, ini telah ditanyakan sebelumnya: askubuntu.com/a/143501/295286
Sergiy Kolodyazhnyy
jadi untuk memutar sekitar saya akan mengambil 1920 piksel pertama dan menyalinnya ke belakang?
Soren
@moo_we_all_do apa maksudmu berputar-putar? Yang perlu Anda lakukan adalah membagi gambar itu menjadi beberapa bagian, meletakkannya di folder, dan hanya memberi tahu jalur skrip ke folder itu. Wallpaper xml akan secara otomatis beralih dan kembali ke gambar pertama
Sergiy Kolodyazhnyy
Maksud saya, gulir, dan saya menemukan jawabannya, terima kasih! : D
Soren