Версия 2.1.0

Quick search

Atlas

Добавлено в версии 1.1.0.

Atlas управляет текстурными атласами: упаковывает несколько текстур в одну. С его помощью вы снижаете количество загружаемых изображений и ускоряете загрузку приложения. Этот модуль содержит как класс Atlas, так и обработку командной строки для создания атласа из набора отдельных файлов PNG. Раздел командной строки требует библиотеки Pillow или устаревшей библиотеки Python Imaging Library (PIL).

Атлас состоит из 2 или более файлов:
  • файл json (.atlas), который содержит имена файлов изображений и расположение текстур в атласе.

  • один или несколько файлов изображений, содержащих текстуры, на которые ссылается файл .atlas.

Определение файлов .atlas

Файл с именем <basename>.atlas - это json-файл с таким форматом:

{
    "<basename>-<index>.png": {
        "id1": [ <x>, <y>, <width>, <height> ],
        "id2": [ <x>, <y>, <width>, <height> ],
        # ...
    },
    # ...
}

Пример из Kivy data/images/defaulttheme.atlas:

{
    "defaulttheme-0.png": {
        "progressbar_background": [431, 224, 59, 24],
        "image-missing": [253, 344, 48, 48],
        "filechooser_selected": [1, 207, 118, 118],
        "bubble_btn": [83, 174, 32, 32],
        # ... и так далее ...
    }
}

В этом примере "defaulttheme-0.png" - это большое изображение, пиксели в прямоугольнике с (431, 224) по (431 + 59, 224 + 24) можно использовать как atlas://data/images/defaulttheme/progressbar_background в любом параметре изображения.

Как создать атлас

Предупреждение

Создание атласа требует библиотеки Pillow (или устаревшей библиотеки Imaging/PIL). Это требование будет удалено в будущем, когда ядро Kivy сможет поддерживать операции загрузки, битблитинга и сохранения.

Вы можете непосредственно использовать этот модуль для создания файлов атласов с помощью этой команды:

$ python -m kivy.atlas <basename> <size> <list of images...>

Допустим, у вас есть список изображений, которые вы хотите поместить в атлас. Каталог называется images и содержит множество файлов png размером 64x64 пикселя:

$ ls
images
$ cd images
$ ls
bubble.png bubble-red.png button.png button-down.png

Вы можете объединить все файлы png в один и создать файл атласа с помощью следующей команды:

$ python -m kivy.atlas myatlas 256x256 *.png
Атлас создан в myatlas.atlas
Создано 1 изображение
$ ls
bubble.png bubble-red.png button.png button-down.png myatlas.atlas
myatlas-0.png

Как видите, у нас появились 2 новых файла: myatlas.atlas и myatlas-0.png. myatlas-0.png - это новое изображение размером 256x256 пикселей, состоящее из всех ваших изображений. Если указанный вами размер недостаточно большой для размещения всех исходных изображений, будут созданы дополнительные файлы атласа, такие как myatlas-1.png, myatlas-2.png и т. д.

Примечание

При использовании этого сценария идентификаторы, на которые ссылаются в атласе, представляют собой имена файлов без расширения. Таким образом, если вы собираетесь назвать файл ../images/button.png, идентификатор для этого изображения будет button.

Если вам нужна информация о пути, вам следует включить use_path следующим образом:

$ python -m kivy.atlas -- --use_path myatlas 256 *.png

В этом случае идентификатор для ../images/button.png будет images_button

Как использовать атлас

Обычно вы указываете изображения, предоставляя путь:

a = Button(background_normal='images/button.png',
           background_down='images/button_down.png')

В нашем предыдущем примере мы создали атлас, содержащий оба изображения, и поместили их в images/myatlas.atlas. Вы можете использовать форму URL для ссылки на них:

a = Button(background_normal='atlas://images/myatlas/button',
           background_down='atlas://images/myatlas/button_down')

Другими словами, путь к изображениям заменяется на:

atlas://путь/к/myatlas/id
# будет искать файл ``путь/к/myatlas.atlas`` и получит изображение ``id``

Примечание

В URL атласа нет необходимости добавлять расширение .atlas. Оно будет автоматически добавлено к имени файла.

Руководство по ручному использованию атласа

>>> from kivy.atlas import Atlas
>>> atlas = Atlas('path/to/myatlas.atlas')
>>> print(atlas.textures.keys())
['bubble', 'bubble-red', 'button', 'button-down']
>>> print(atlas['button'])
<kivy.graphics.texture.TextureRegion object at 0x2404d10>
class kivy.atlas.Atlas(filename)[source]

Базовый класс: kivy.event.EventDispatcher

Управление текстурным атласом. Дополнительную информацию смотрите в документации по модулю.

static create(outname, filenames, size, padding=2, use_path=False)[source]

Этот метод может быть использован для создания атласа вручную из набора изображений.

Parameters
outname: str

Базовое имя для создания .atlas и -<idx>.png для связанных изображений.

filenames: list

Список имен файлов для помещения в атлас.

size: int или list (width, height)

Размер изображения атласа. Если размер недостаточно большой, чтобы поместить все исходные изображения, будут созданы дополнительные изображения атласа по мере необходимости.

padding: int, по умолчанию 2

Отступ вокруг каждого изображения.

Будьте осторожны. Если вы используете отступ < 2, могут возникнуть проблемы с границами изображений. Из-за линеаризации OpenGL он может использовать пиксели смежных изображений.

Если вы используете отступ >= 2, мы автоматически создадим "границу" из 1 пикселя вокруг вашего изображения. Если вы посмотрите на результат, не пугайтесь, если изображение внутри не совсем то же самое, что и ваше :).

use_path: bool, по умолчанию False

Если True, в атласе будут включены относительные пути к исходным файлам png вместо простых имен файлов. Ведущие точки и слэши будут исключены, а все остальные слэши в пути будут заменены подчеркиваниями. Например, если use_path равен False (по умолчанию) и имя файла - ../data/tiles/green_grass.png, то идентификатор будет green_grass. Если use_path равен True, то он будет data_tiles_green_grass.

Изменено в версии 1.8.0: Добавлен параметр use_path

filename

Имя файла текущего атласа.

filename - это AliasProperty и по умолчанию равен None.

original_textures

Список исходных текстур атласа (содержащих textures).

original_textures - это ListProperty и по умолчанию пустой список [].

Добавлено в версии 1.9.1.

textures

Список доступных текстур в атласе.

textures - это DictProperty и по умолчанию равен {}.