tex2img
A texture decompression C++-extension for Python.
Installation
pip install tex2img
or download/clone the git and use
python setup.py install
Notes
- etcpack causes a segfault on linux systems, so linux systems will use basisu under the hood for etc instead
Functions
All functions accept only args and aren't able to handle kwards atm.
basisu_decompress
Decompresses data to RGBA via basisu's unpack_block function.
Args: (compressed data: bytes, width: int, height: int, format: int)
Returns: bytes
Formats:
Format | Mode | Note |
---|---|---|
0 | cETC1 | ETC1 |
1 | cETC1S | ETC1(subset:diff colors only, no subblocks) |
2 | cETC2_RGB | ETC2 color block |
3 | cETC2_RGBA | ETC2 alpha block followed by ETC2 color block |
4 | cETC2_ALPHA | ETC2 EAC alpha block |
5 | cBC1 | DXT1 |
6 | cBC3 | DXT5(DXT5A block followed by a DXT1 block) |
7 | cBC4 | DXT5A |
8 | cBC5 | 3DC / DXN(two DXT5A blocks) |
9 | cBC7 | |
10 | cASTC4x4 | |
11 | cPVRTC1_4_RGB | |
12 | cPVRTC1_4_RGBA | |
13 | cATC_RGB | |
14 | cATC_RGBA_INTERPOLATED_ALPHA | |
15 | cFXT1_RGB | |
16 | cPVRTC2_4_RGBA | |
17 | cETC2_R11_EAC | |
18 | cETC2_RG11_EAC |
decompress_astc
Decompresses raw astc-compressed data to RGBA.
Args: (compressed data: bytes, image width: int, image height: int, block_width: int, block_height: int, isSRGB: False)
Returns: bytes
decompress_atc
Decompresses raw atc-compressed data to RGB(A).
Args: (compressed data: bytes, width: int, height: int, alpha: bool)
Returns: bytes
alpha = False for ATC_RGB alpha = True for ATC_RGBA
decompress_pvrtc
Decompresses raw pvrtc-compressed data to RGBA.
Args: (compressed data: bytes, width: int, height: int, do2bit_mode: 0)
Returns: bytes
decompress_etc
Decompresses raw etc-compressed data to RGB(A).
Args: (compressed data: bytes, width: int, height: int, format: int)
This function has a memory leak, so it might crash if you use it on too many images at once (~500+). The basisu_decompress function also supports the most common ETC formats, so it is a good alternative.
Formats:
Format | Mode |
---|---|
0 | ETC1_RGB_NO_MIPMAPS |
1 | ETC2PACKAGE_RGB_NO_MIPMAPS |
2 | ETC2PACKAGE_RGBA_NO_MIPMAPS_OLD |
3 | ETC2PACKAGE_RGBA_NO_MIPMAPS |
4 | ETC2PACKAGE_RGBA1_NO_MIPMAPS |
5 | ETC2PACKAGE_R_NO_MIPMAPS |
6 | ETC2PACKAGE_RG_NO_MIPMAPS |
7 | ETC2PACKAGE_R_SIGNED_NO_MIPMAPS |
8 | ETC2PACKAGE_RG_SIGNED_NO_MIPMAPS |
9 | ETC2PACKAGE_sRGB_NO_MIPMAPS |
10 | ETC2PACKAGE_sRGBA_NO_MIPMAPS |
11 | ETC2PACKAGE_sRGBA1_NO_MIPMAPS |
crunch_get_texture_info
Retrieves texture information from the CRN file.
Args: (data: bytes)
Returns: dict
crunch_get_level_info
Retrieves mipmap level specific information from the CRN file.
Args: (data: bytes, mipmap_leve: int)
Returns: dict
crunch_unpack_level
Transcodes the specified mipmap level to a destination buffer.
Args: (data: bytes, mipmap_level: int)
Returns: bytes
Sources
ATC & ASTC
The complete BinomialLLC/basis_universal is used and supported. It's default for the ATC and ASTC decompression.
ETC
The whole source of Ericsson/ETCPACK is used for the ETC decompression.
PVRTC
PVRTDecompress.cpp and PVRTDecompress.h of powervr-graphics/Native_SDK are used for the PVRTC decompression.
crunch
A mixed version of BinomialLLC/crunch and Unity-Technologies/crunch is used.
The Unity fork doesn't yield correct results for the original modes, so the BiomialLLC version is used for all modes besides ETC, which was created byUnity.