Як можна встановити шпалери з прокруткою?


10

Я хочу, щоб мої шпалери були бічною прокруткою Super Mario World Yoshi's Island 1 . Як тільки шпалери прокручуються всюди, вона буде безперешкодно циклічно повертатися до початку.

Чи є програма, або XML, яка б це зробила для мене? Я використовую GNOME Shell.


6
Тому . . . ви в основному хочете мати анімовані шпалери?
Сергій Колодяжний

Він анімований, але я не зміг знайти нічого, що могло б зробити його прокруткою.
Сорен

3
Я думаю, що можна зробити - це розділити це зображення на кілька "знімків" і використовувати XML-файл для налаштування переходів із встановленим періодом часу. Таким чином, це буде подібне до старих консольних ігор, де у вас є один "вид", тоді ви переходите кордон, а на екрані з'являється інший погляд тощо. Думаєте, це було б гарною ідеєю?
Сергій Колодяжний

2
Я думаю про те, щоб написати сценарій для цього. Може зайняти мене пару днів. Я дам вам знати, як тільки я придумаю якийсь робочий код, гаразд?
Сергій Колодяжний

1
Я б передав цей запит розробнику XScreenSaver. Це звучить як чудова ідея, яку, сподіваюся, забуде розробник. Це не будуть шпалери, як ви просили, але це альтернативне рішення для задоволення ваших "графічних бажань". Аналогічно, папку «Теги / картинки» можна чергати і в такий спосіб, щоб прокрутити. Мені дуже подобається ваш запит!
WinEunuuchs2Unix

Відповіді:


4

Оновлення 22.10.16

Сценарій було оновлено, щоб відповідати вимогам цього питання: https://askubuntu.com/a/840381/295286

Перехід і тривалість були необов’язковими та мали значення за замовчуванням. -sтакож додано опцію для розміру шпалер (те саме, як опції "Плитка", "Масштаб", "Натягнути" в Налаштуваннях системи).


Так само, як я вже говорив у коментарях, вам доведеться розрізати зображення на рівні розміри або частини, що перекриваються, і створити для нього слайд-шоу. Я не знаю ліцензії того конкретного зображення, яке ви хочете, тому я залишаю вам його вирізати ( Підказка ).

Однак ось сценарій генератора анімованих шпалер, який я написав. Використання дуже просте. Як показано -hваріантом:

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

Приклад:

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

Вихідний код

Також доступний на 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()

Чи знаєте ви, як програматично розрізати зображення на n* nшматки, рухаючись по nпікселів x та nпікселів y при кожному розрізі? Наприклад, команда для YI1 шпалер була б, command 1920 1080 1 0і вона цикла на себе?
Сорен

@moo_we_all_do насправді, про це запитували раніше: askubuntu.com/a/143501/295286
Сергій Колодяжний

так що для циклу навколо я б взяв перші 1920 пікселів і скопіював би їх назад?
Сорен

@moo_we_all_do, що ти маєш на увазі? Що потрібно зробити, це розділити це зображення на рівні частини, покласти їх у папку та просто вказати шлях сценарію до цієї папки. Шпалери xml автоматично перейдуть і повернуться до першого зображення
Сергій Колодяжний

Під циклом я маю на увазі прокрутку, і я зрозумів це, дякую! : D
Сорен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.