Table Of Contents
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
и по умолчанию равен {}.