Я хочу, чтобы мои обои были дополнением к Super Mario World Yoshi's Island 1 . Как только обои прокручиваются до конца, они легко возвращаются к началу.
Есть ли программа, или XML, которая бы сделала это для меня? Я использую GNOME Shell.
Я хочу, чтобы мои обои были дополнением к Super Mario World Yoshi's Island 1 . Как только обои прокручиваются до конца, они легко возвращаются к началу.
Есть ли программа, или XML, которая бы сделала это для меня? Я использую GNOME Shell.
Ответы:
Скрипт был обновлен для соответствия требованиям в этом вопросе: https://askubuntu.com/a/840381/295286
Переход и продолжительность были сделаны необязательными и имеют значения по умолчанию. -s
опция также добавлена для определения размера обоев (такие же как Tile, Scale, Stretch из System Settings).
Как я уже говорил в комментариях, вам придется разрезать изображение на четные или перекрывающиеся части и создать для него слайд-шоу. Я не знаю лицензию того конкретного изображения, которое вы хотите, поэтому я оставлю это на ваше усмотрение, чтобы сократить его ( подсказка ).
Однако вот сценарий генератора анимированных обоев, который я написал. Использование очень просто. Как показано -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
и была бы зациклена на себе?