Làm thế nào tôi có thể thiết lập một hình nền cuộn bên?


10

Tôi muốn hình nền của mình là một cuộn bên của Super Mario World Yoshi's Island 1 . Khi hình nền cuộn hết cỡ, nó sẽ liền mạch lặp lại từ đầu.

Có một chương trình, hoặc XML, sẽ thực hiện điều này cho tôi? Tôi đang sử dụng Gnome Shell.


6
Vì thế . . . về cơ bản bạn muốn có một hình nền hoạt hình?
Sergiy Kolodyazhnyy

Nó là hoạt hình, nhưng tôi không thể tìm thấy bất cứ điều gì có thể làm cho nó cuộn bên.
Soren

3
Những gì tôi nghĩ có thể được thực hiện là chia hình ảnh đó thành nhiều "ảnh chụp nhanh" và sử dụng tệp XML để thiết lập các hiệu ứng chuyển tiếp với khoảng thời gian đã đặt. Theo cách đó, nó sẽ giống như trong các trò chơi console cũ, nơi bạn có một "chế độ xem" sau đó bạn vượt qua biên giới và một chế độ xem khác xuất hiện trên màn hình, v.v. Nghĩ rằng đó sẽ là một ý tưởng tốt?
Sergiy Kolodyazhnyy

2
Tôi đang nghĩ đến việc viết một kịch bản cho điều đó. Có thể đưa tôi vài ngày. Tôi sẽ cho bạn biết khi tôi đưa ra một số mã làm việc, OK?
Sergiy Kolodyazhnyy

1
Tôi sẽ chuyển yêu cầu này cho nhà phát triển XScreenSaver. Nghe có vẻ là một ý tưởng tuyệt vời mà tôi hy vọng nhà phát triển sẽ xem xét. Nó sẽ không phải là hình nền như bạn yêu cầu mà là một giải pháp thay thế để đáp ứng "mong muốn đồ họa" của bạn. Tương tự thư mục / Ảnh cũng có thể được xếp hàng theo cách này để cuộn. Tôi thực sự thích yêu cầu của bạn!
WinEunuuchs2Unix

Câu trả lời:


4

Cập nhật ngày 22/10/2016

Tập lệnh đã được cập nhật để phù hợp với yêu cầu trong câu hỏi này: https://askubfox.com/a/840381/295286

Quá trình chuyển đổi và thời lượng được thực hiện tùy chọn và có các giá trị mặc định. -stùy chọn cũng được thêm vào để định cỡ hình nền (giống như tùy chọn Ngói, Tỷ lệ, Kéo dài từ Cài đặt hệ thống).


Giống như tôi đã nói trong các bình luận, bạn sẽ phải cắt hình ảnh thành các mảnh thậm chí có kích thước hoặc chồng chéo và tạo ra một slideshow cho nó. Tôi không biết giấy phép của hình ảnh cụ thể mà bạn muốn, vì vậy tôi sẽ để nó cho bạn cắt nó ( Gợi ý ).

Tuy nhiên, đây là một kịch bản tạo hình nền hoạt hình mà tôi đã viết. Cách sử dụng rất đơn giản. Như được hiển thị bởi -htùy chọn:

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

Thí dụ:

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

Mã nguồn

Cũng có sẵn trên 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()

Bạn có biết cách lập trình cắt một hình ảnh thành các mảnh n* n, di chuyển dọc theo npixel x và npixel y ở mỗi lần cắt không? Ví dụ, lệnh cho hình nền YI1 sẽ là gì command 1920 1080 1 0và nó sẽ tự lặp lại?
Soren

@moo_we_all_do thực sự, điều này đã được hỏi trước đó: askubfox.com/a/143501/295286
Sergiy Kolodyazhnyy

Vì vậy, để vòng quanh tôi sẽ lấy 1920 pixel đầu tiên và sao chép nó ra phía sau?
Soren

@moo_we_all_do ý bạn là gì? Những gì bạn cần làm là chia hình ảnh đó thành các phần chẵn, đặt chúng vào thư mục và chỉ cần nói đường dẫn kịch bản đến thư mục đó. Hình nền xml sẽ tự động chuyển và lặp lại hình ảnh đầu tiên
Sergiy Kolodyazhnyy

Theo vòng lặp tôi có nghĩa là cuộn, và tôi đã tìm ra nó, cảm ơn! : D
Soren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.