Skip to main content

Python spine atlas parsing

Project description

SpineAtlas

Modify atlas data and export frames or convert other atlas-like data to spine atlas

Installation

Install the latest version of SpineAtlas from PyPI:

pip install SpineAtlas

Usage

Opening and saving atlas

from SpineAtlas import ReadAtlasFile

atlas = ReadAtlasFile('1.atlas')
# The code will automatically determine the format of Atlas
atlas.version = False # Convert to Atlas 3.0 format
atlas.version = True # Convert to Atlas 4.0 format
atlas.SaveAtlas('1_v4.atlas')

Check if the atlas is missing a textures

from SpineAtlas import ReadAtlasFile

atlas = ReadAtlasFile('1.atlas')
# If the texture and atlas are in the same directory, you don't need to pass the path
miss = atlas.CheckTextures()
# If `miss` is empty, it means there is no missing textures

Modify the texture scaling of the atlas

from SpineAtlas import ReadAtlasFile

atlas = ReadAtlasFile('1.atlas')
# If the texture and atlas are in the same directory, you don't need to pass the path
atlas.ReScale()
atlas.SaveAtlas('1_scale.atlas')

Export atlas frames

from SpineAtlas import ReadAtlasFile

atlas = ReadAtlasFile('1.atlas')
# If the texture and atlas are in the same directory, you don't need to pass the texture path
# mode : ['Normal', 'Premul', 'NonPremul']
# --- Normal - do not process the texture
# --- Premul - convert the texture to premultiplied
# --- NonPremul - convert the texture to non-premultiplied
atlas.SaveFrames(path='1_frames', mode='Premul')

Convert other formats to Spine Atlas

from SpineAtlas import Atlas, AtlasTex, AtlasFrame

'''
{
Texture:
    Texture_Name: str
    Texture_Wdith: int
    Texture_Height: int
	
Frame:
[
    [
    Frame_Name: str
    Cut_X: int
    Cut_Y: int
    Cut_Wdith: int
    Cut_Height: int
    Original_X: int
    Original_Y: int
    Original_Wdith: int
    Original_Height: int
    Rotate: int
    ],
    ...
]
}
'''
TextureDict = {...}
frames = []
for i in TextureDict['Frame']:
    frames.append(AtlasFrame(i['Frame_Name'], i['Cut_X'], i['Cut_Y'], i['Cut_Wdith'], i['Cut_Height'], i['Original_X'], i['Original_Y'], i['Original_Wdith'], i['Original_Height'], i['Rotate']))
tex = TextureDict['Texture']
texture = AtlasTex(tex['Texture_Name'], tex['Texture_Wdith'], tex['Texture_Height'], frames=frames)
atlas = Atlas([texture])
atlas.SaveAtlas('1.atlas')

Recalculate the clipping anchor point

from SpineAtlas import ReadAtlasFile, Anchor

'''
class Anchor(IntEnum):
    TOP_LEFT = 1
    TOP_CENTER = 2
    TOP_RIGHT = 3
    CENTER_LEFT = 4
    CENTER = 5
    CENTER_RIGHT = 6
    BOTTOM_LEFT = 7
    BOTTOM_CENTER = 8
    BOTTOM_RIGHT = 9
'''

atlas = ReadAtlasFile('1.atlas')
# The default anchor point for Spine Atlas clipping is the top left corner
atlas.cutp = Anchor.BOTTOM_LEFT
atlas.ReOffset() # Recalculate clipping X/Y starting from the upper left corner
atlas.SaveAtlas('1_1_ReOffset.atlas')

Recalculate the Offset anchor point

from SpineAtlas import ReadAtlasFile, Anchor

'''
class Anchor(IntEnum):
    TOP_LEFT = 1
    TOP_CENTER = 2
    TOP_RIGHT = 3
    CENTER_LEFT = 4
    CENTER = 5
    CENTER_RIGHT = 6
    BOTTOM_LEFT = 7
    BOTTOM_CENTER = 8
    BOTTOM_RIGHT = 9
'''

atlas = ReadAtlasFile('1.atlas')
# The default anchor point for Spine Atlas Offset is the bottom left corner
atlas.offp = Anchor.TOP_LEFT
atlas.ReOffset() # Recalculate Offset X/Y starting from the bottom left corner
atlas.SaveAtlas('1_1_ReOffset.atlas')

Convert image to premultiplied/non-premultiplied

from PIL.Image import open as imgop
from SpineAtlas import ImgPremultiplied, ImgNonPremultiplied

img = imgop('1.png')

tex = ImgPremultiplied(img)
tex.save('1_premultiplied.png')

tex = ImgNonPremultiplied(img)
tex.save('1_non-premultiplied.png')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spineatlas-1.0.8.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spineatlas-1.0.8-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file spineatlas-1.0.8.tar.gz.

File metadata

  • Download URL: spineatlas-1.0.8.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for spineatlas-1.0.8.tar.gz
Algorithm Hash digest
SHA256 3bd7eaf09c0c5545b66e8c9631b452cdaf1dcd4ce18580ff563fe359fd83eed7
MD5 551360aa6d609d9d00ce20b646f2fbbe
BLAKE2b-256 7d6adc358dc3aa67bf9b2c3ba8b57eb67ba2d7a9a53eb5136a26b2b897b6eb33

See more details on using hashes here.

File details

Details for the file spineatlas-1.0.8-py3-none-any.whl.

File metadata

  • Download URL: spineatlas-1.0.8-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for spineatlas-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 bca5710af7bf7b8b9304f7504f9bb7707339911308be38d8a242207f1a817090
MD5 ff9e52fadde538a52383867da243aaf5
BLAKE2b-256 8afc84fbad0f1392cc597a02972418455f70ab0c61d2d79d0fa59bd60b5120ad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page