Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/site-packages/PIL/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc

�

&ٜg+A����dZddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
mZGd	�d
e�ZGd�de�ZGd
�de�Zd%d�Z	d&					d'd�Zd(d�Zd(d�ZGd�de�Zd)d�ZGd�dej�ZGd�dej4�ZGd�de�ZGd�de�ZGd�dej<�Zd*d �Z e
jBejDee�e
jFejDd!�e
jHd"e�e
jHd#e�e
jJejDe �e
jLd$e�y)+a�
Blizzard Mipmap Format (.blp)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

BLP1 files, used mostly in Warcraft III, are not fully supported.
All types of BLP2 files used in World of Warcraft are supported.

The BLP file structure consists of a header, up to 16 mipmaps of the
texture

Texture sizes must be powers of two, though the two dimensions do
not have to be equal; 512x256 is valid, but 512x200 is not.
The first mipmap (mipmap #0) is the full size image; each subsequent
mipmap halves both dimensions. The final mipmap should be 1x1.

BLP files come in many different flavours:
* JPEG-compressed (type == 0) - only supported for BLP1.
* RAW images (type == 1, encoding == 1). Each mipmap is stored as an
  array of 8-bit values, one per pixel, left to right, top to bottom.
  Each value is an index to the palette.
* DXT-compressed (type == 1, encoding == 2):
- DXT1 compression is used if alpha_encoding == 0.
  - An additional alpha bit is used if alpha_depth == 1.
  - DXT3 compression is used if alpha_encoding == 1.
  - DXT5 compression is used if alpha_encoding == 7.
�)�annotationsN)�IntEnum)�BytesIO)�IO�)�Image�	ImageFilec��eZdZdZy)�FormatrN)�__name__�
__module__�__qualname__�JPEG���=/usr/local/lib/python3.12/site-packages/PIL/BlpImagePlugin.pyrr,s���Drrc��eZdZdZdZdZy)�Encodingr��N)rr
r�UNCOMPRESSED�DXT�UNCOMPRESSED_RAW_BGRArrrrr0s���L�
�C��rrc��eZdZdZdZdZy)�
AlphaEncodingrr�N)rr
r�DXT1�DXT3�DXT5rrrrr6s���D��D��Drrc�<�|dz	dzdz|dz	dzdz|dzdzfS)N��r��?rr)�is r�
unpack_565r&<s2��
�"�W����"�a�1�f��_��$:�Q��X�!�O�K�Krc	���t|�dz}t�t�t�t�f}t|�D�]/}|dz}tjd||�\}}}t|�\}	}
}t|�\}}
}td�D]�}td�D]�}|dz}|dz	}d}|dk(r|	|
|}}}n�|dk(r||
|}}}nx|dk(r@||kDr"d|	z|zdz}d|
z|
zdz}d|z|zdz}nL|	|zdz}|
|
zdz}||zdz}n3|dk(r.||kDr"d|z|	zdz}d|
z|
zdz}d|z|zdz}nd	\}}}}|r||j
|g���||j
g�������2|S)
�E
    input: one "row" of data (i.e. will produce 4*width pixels)
    �z<HHI�rr�rr)rrrr��len�	bytearray�range�struct�unpack_fromr&�extend)�data�alpha�blocks�ret�block_index�idx�color0�color1�bits�r0�g0�b0�r1�g1�b1�jr%�control�a�r�g�bs                      r�decode_dxt1rH@s�����Y�!�^�F��;�	��Y�[�)�+�
>�C��V�}���A�o��%�1�1�&�$��D�������'�
��B����'�
��B���q��A��1�X����(���q�y�����a�<� �"�b�!�q�A���\� �"�b�!�q�A���\������V�b�[�Q�.����V�b�[�Q�.����V�b�[�Q�.���"�W��N���"�W��N���"�W��N����\������V�b�[�Q�.����V�b�[�Q�.����V�b�[�Q�.��%/�
��1�a�����F�M�M�1�a��A�,�/���F�M�M�1�a��)�,�?��%�X�Jrc	�&�t|�dz}t�t�t�t�f}t|�D�]M}|dz}|||dz}tjd|�}tjd|d�\}}tjd|d�\}	t|�\}
}}t|�\}
}}td�D]�}d}td�D]�}d|z|zd	z}||}|rd}|dz}nd
}|dz}|dz}|	d	d|z|zzz	d
z}|dk(r|
||}}}nY|dk(r|
||}}}nM|d	k(r"d	|
z|
zd
z}d	|z|zd
z}d	|z|zd
z}n&|d
k(r!d	|
z|
zd
z}d	|z|zd
z}d	|z|zd
z}||j
|g�������P|S)r(�z<8B�<HHr)�<I�r*FrT��rrrr,)r3r5r6r7r8�blockr;r9r:�coder<r=r>r?r@rArB�highr%�alphacode_indexrD�
color_coderErFrGs                         r�decode_dxt3rUys���
��Y�"�_�F��;�	��Y�[�)�+�
>�C��V�}���B����S�3��8�$���!�!�%��/���+�+�E�5�!�<�����$�$�T�5�"�5�����'�
��B����'�
��B���q��A��D��1�X��#$�q�5�1�9��"2����)��� �D��!�G�A��D���H�A��R���"�a�1�q�5�1�9�o�5��=�
���?� �"�b�!�q�A��1�_� �"�b�!�q�A��1�_��R��"���*�A��R��"���*�A��R��"���*�A��1�_��R��"���*�A��R��"���*�A��R��"���*�A��A��
�
�q�!�Q��l�+�5��%�T�Jrc	�z�t|�dz}t�t�t�t�f}t|�D�]�}|dz}|||dz}tjd|�\}}tjd|d�}|d|ddzz|ddzz|dd	zz}	|d
|ddzz}
tjd|d�\}}tjd
|d�\}
t|�\}}}t|�\}}}td�D�])}td�D�]}dd|z|zz}|dkr	|
|z	dz}n|dk(r|
dz	|	dzdzz}n|	|dz
z	dz}|d
k(r|}nF|dk(r|}n>||kDrd|z
|z|dz
|zzdz}n$|dk(rd
}n|dk(rd}nd|z
|z|dz
|zzdz}|
dd|z|zzz	dz}|d
k(r|||}}}nY|dk(r|||}}}nM|dk(r"d|z|zdz}d|z|zdz}d|z|zdz}n&|dk(r!d|z|zdz}d|z|zdz}d|z|zdz}||j
|g�����,���|S)zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rJz<BBz<6Brrr)r*r#�rrrKrLrMrrN�r+r,)r3r5r6r7r8rP�a0�a1r;�
alphacode1�
alphacode2r9r:rQr<r=r>r?r@rArBr%rS�	alphacoderDrTrErFrGs                             r�decode_dxt5r^�s���
��Y�"�_�F��;�	��Y�[�)�+�
>�C��V�}���B����S�3��8�$���#�#�E�5�1���B��!�!�%���2���!�W��Q��1��-��a��B��?�4��7�b�=�Q�
��!�W��Q��1��-�
��+�+�E�5�!�<�����$�$�T�5�"�5�����'�
��B����'�
��B���q��A��1�X��"#�q�1�u�q�y�/��"�b�(�!+��!>�$� F�I�$��*�!+�r�!1�z�Q��$�6N� O�I�!+��"�0D�!E�� M�I���>��A��!�^��A��"�W��i�-�2�-��Q��"�0D�D��J�A��!�^��A��!�^��A��i�-�2�-��Q��"�0D�D��J�A�"�a�1�q�5�1�9�o�5��=�
���?� �"�b�!�q�A��1�_� �"�b�!�q�A��1�_��R��"���*�A��R��"���*�A��R��"���*�A��1�_��R��"���*�A��R��"���*�A��R��"���*�A��A��
�
�q�!�Q��l�+�O��#%�v�Jrc��eZdZy)�BLPFormatErrorN)rr
rrrrr`r`�s��rr`c��|dddvS)Nr*)�BLP1�BLP2r)�prefixs r�_acceptre�s���"�1�:�+�+�+rc� �eZdZdZdZdZdd�Zy)�BlpImageFilez 
    Blizzard Mipmap Format
    �BLPzBlizzard Mipmap Formatc�&�|jjd�|_t|j�s#dt	|j���}t|��t
jd|jjd��d}|jdk(r6t
jd|jjd��ddk7}n�t
jd|jjd��d}t
jd|jjd��ddk7}t
jd|jjd��d}|jjdtj�t
jd	|jjd
��|_|jdk(rdt
jd|jjd��d}|jjdtj�|||f}d}n||f}d}|jj�}|rd
nd|_
tj|d|j z||�g|_y)Nr*zBad BLP magic �<irrbrL�<br�<IIr)���RGBA�RGB�rr)�fp�read�magicre�reprr`r0�unpack�seek�os�SEEK_CUR�_size�decode�_moder	�_Tile�size�tile)	�self�msg�compressionr4�encoding�alpha_encoding�args�offset�decoders	         r�_openzBlpImageFile._opens����W�W�\�\�!�_��
��t�z�z�"�"�4��
�
�#3�"4�5�C� ��%�%��m�m�D�$�'�'�,�,�q�/�:�1�=���:�:�� ��M�M�$������Q��8��;�q�@�E��}�}�T�4�7�7�<�<��?�;�A�>�H��M�M�$������Q��8��;�q�@�E�#�]�]�4������a��A�!�D�N��G�G�L�L��B�K�K�(��]�]�5�$�'�'�,�,�q�/�:��
��:�:�� ��}�}�T�4�7�7�<�<��?�;�A�>�H��G�G�L�L��B�K�K�(���5�1�D��F���5�.�A�D��F��*�*�#�#�%��$�V�%��
��_�_�W�f�t�y�y�.@�&�$�O�P��	rN��return�None)rr
r�__doc__�format�format_descriptionr�rrrrgrg�s����F�1��Qrrgc�j�eZdZdZd	d�Zejd
d��Zd
d�Zdd�Z	dd�Z
						d
d�Zy)�_BLPBaseDecoderTc��	|j�|j�y#tj$r}d}t	|�|�d}~wwxYw)NzTruncated BLP file)���r)�_read_header�_loadr0�error�OSError)r��buffer�er�s    rr{z_BLPBaseDecoder.decode)sH��	&������J�J�L����|�|�	&�&�C��#�,�A�%��	&�s� #�A	�A�A	c��y�Nr�r�s rr�z_BLPBaseDecoder._load2s��rc��tjd|jd��|_tjd|jd��|_y)N�<16I�@)r0rv�
_safe_read�_offsets�_lengthsr�s rr�z_BLPBaseDecoder._read_header6s8���
�
�f�d�o�o�f�.E�F��
��
�
�f�d�o�o�f�.E�F��
rc�^�|j�J�tj|j|�Sr�)�fdr	r�)r��lengths  rr�z_BLPBaseDecoder._safe_read:s)���w�w�"�"�"��#�#�D�G�G�V�4�4rc���g}td�D]B}	tjd|jd��\}}}}|j||||f��D|S#tj$rY|SwxYw)N��<4Br*)r/r0rvr�r��append)r�r6r%rGrFrErDs       r�
_read_palettez_BLPBaseDecoder._read_palette>su�����s��A�
�#�]�]�5�$�/�/�!�2D�E�
��1�a��
�J�J��1�a��|�$���
���<�<�
���
�
�s�*A�A-�,A-c�<�t�}t|j|jd��}		t	j
d|j
d��\}||\}}}}	|||f}
|r|
|	fz
}
|j|
��Q#tj$rY|SwxYw)Nr�<Br)	r.rr�r�r0rvrsr�r2)r��paletter4r3�_datar�rGrFrErD�ds           r�
_read_bgraz_BLPBaseDecoder._read_bgraHs����{�������
�
�a�(8�9�:���
�"�M�M�$��
�
�1�
�>�	��!���J�A�q�!�Q�"#�Q���A���a�T�	���K�K��N����<�<�
����
�s�'B�B�BN)r�z$bytes | Image.SupportsArrayInterfacer�ztuple[int, int]r�)r��intr��bytes)r��list[tuple[int, int, int, int]])r�r�r4�boolr�r.)rr
r�	_pulls_fdr{�abc�abstractmethodr�r�r�r�r�rrrr�r�&sS���I��	���
��
�G�5���6��?C��	�rr�c��eZdZdd�Zdd�Zy)�BLP1Decoderc��|j\|_|_}|jtjk(r|j�y|jdk(re|jdvr4|j
�}|j||�}|j|�ydt|j���}t|��dt|j���}t|��)Nr)r*r#zUnsupported BLP encoding zUnsupported BLP compression )r��_compression�	_encodingrr�_decode_jpeg_streamr�r��
set_as_rawrur`)r�r4r�r3r�s     rr�zBLP1Decoder._load[s���37�9�9�0���4�>�5�������+��$�$�&�
�
�
�!�
#��~�~��'��,�,�.�����w��6������%�1�$�t�~�~�2F�1G�H��$�S�)�)�0��d�n�n�1E�0F�G�C� ��%�%rc��ddlm}tjd|j	d��\}|j	|�}|j
�J�|j	|jd|j
j�z
�|j	|jd�}||z}|t|��}tj|j�|jdk(rI|jd\}}}}	t|	t �sJ�t#j$||||	ddf�g|_|j'd�j)�\}
}}tj*d|||
f�}
|j-|
j/��y)Nr)�
JpegImageFilerLr*r�CMYKrp)�JpegImagePluginr�r0rvr�r�r��tellr�rr�_decompression_bomb_checkr~�moder�
isinstance�tupler	r}�convert�split�merger��tobytes)r�r��jpeg_header_size�jpeg_headerr3�image�decoder_name�extentsr�r�rErFrG�reversed_images              rr�zBLP1Decoder._decode_jpeg_streammsF��2�$�m�m�D�$�/�/�!�2D�E��	��o�o�&6�7���w�w�"�"�"�����
�
�a�(�4�7�7�<�<�>�9�:����t�}�}�Q�/�0���T�!���g�d�m�,��
�'�'��
�
�3��:�:���27�*�*�Q�-�/�L�'�6�4��d�E�*�*�*�����g�v��Q���?P�Q��E�J��-�-��&�,�,�.���1�a����U�Q��1�I�6������.�.�0�1rNr�)rr
rr�r�rrrr�r�Zs��&�$2rr�c��eZdZdd�Zy)�BLP2Decoderc���|j\|_|_}|_|j	�}|j
�J�|j
j
|jd�|jdk(�rB|jtjk(r|j||�}�n4|jtjk(�r�t�}|jtjk(rp|jj dzdzdz}t#|jj$dzdz�D]'}t'|j)|�|�D]}||z
}�	�)�n|jtj*k(rn|jj dzdzdz}t#|jj$dzdz�D]&}t-|j)|��D]}||z
}�	�(n�|jtj.k(rn|jj dzdzdz}t#|jj$dzdz�D]&}t1|j)|��D]}||z
}�	�(nidt3|j���}t5|��dt3|j���}t5|��d	t3|j���}t5|��|j7|�y)
Nrrrr*r)rJzUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )r�r�r��_alpha_encodingr�r�rwr�rrr�rr.rr�state�xsizer/�ysizerHr�rrUrr^rur`r�)r�r4r�r3�linesize�ybr�r�s        rr�zBLP2Decoder._load�s���IM���F���4�>�5�$�2F��$�$�&���w�w�"�"�"������T�]�]�1�%�&�����!��~�~��!6�!6�6����w��6�����8�<�<�/� �{���'�'�=�+=�+=�=� $�
�
� 0� 0�1� 4��:�Q�>�H�#�T�Z�Z�%5�%5��%9�a�$?�@��!,�T�_�_�X�-F��!N�A� �A�I�D�"O�A��)�)�]�-?�-?�?� $�
�
� 0� 0�1� 4��:�R�?�H�#�T�Z�Z�%5�%5��%9�a�$?�@��!,�T�_�_�X�-F�!G�A� �A�I�D�"H�A��)�)�]�-?�-?�?� $�
�
� 0� 0�1� 4��:�R�?�H�#�T�Z�Z�%5�%5��%9�a�$?�@��!,�T�_�_�X�-F�!G�A� �A�I�D�"H�A�8��T�=Q�=Q�8R�7S�T�C�(��-�-�-�d�4�>�>�.B�-C�D��$�S�)�)�-�T�$�2C�2C�-D�,E�F�C� ��%�%�����rNr�)rr
rr�rrrr�r��s��,rr�c� �eZdZdZdd�Zdd�Zy)�
BLPEncoderTc	�8�d}|j�J�|jjdd�}tt|�dz�D]1}||dz|dzdz\}}}}|t	j
d||||�z
}�3t|�dkr|dz
}t|�dkr�|S)Nrror*rr�is)�im�
getpaletter/r-r0�pack)r�r3r�r%rErFrGrDs        r�_write_palettezBLPEncoder._write_palette�s������w�w�"�"�"��'�'�$�$�V�V�4���s�7�|�q�(�)�A� ��Q��!�a�%�1��5�J�A�q�!�Q��F�K�K��q�!�Q��2�2�D�*��$�i�'�!��K��D��$�i�'�!��rc
���|j�}dt|�z}tjd|gd���}|j�J�|jj
\}}|tjd||zgd���z
}||z
}t
|�D]F}t
|�D]6}|tjd|jj||f��z
}�8�Ht|�d|fS)N�r�)rrrrrrrrrrrrrrrr�r)r�r-r0r�r�r~r/�getpixel)	r��bufsize�palette_datar�r3�w�h�y�xs	         r�encodezBLPEncoder.encode�s����*�*�,�� �3�|�#4�4���{�{�6�6�8�Y�8���w�w�"�"�"��w�w�|�|���1�����F�A��E�8�Y�8�8�������q��A��1�X������D�$�'�'�*:�*:�A�q�6�*B�C�C�����4�y�!�T�!�!rN)r�r�)r�r�r�ztuple[int, int, bytes])rr
r�
_pushes_fdr�r�rrrr�r��s���J�	�"rr�c
�b�|jdk7r
d}t|��|jjd�dk(rdnd}|j	|�|j
�J�|j	t
jdd��|j
jd	k(rdnd
}|dk(r&|j	t
jd|��n�|j	t
jdtj��|j	t
jd|��|j	t
jdd
��|j	t
jdd
��|j	t
jd
g|j����|dk(rJ|j	t
jdd��|j	t
jdd
��tj||tjdd|jzd
|j�g�y)N�PzUnsupported BLP image mode�blp_version�BLP1rbrcrjrrorz<Lrkrlr#rhrq)r��
ValueError�encoderinfo�get�writer�r0r�rrr~r	�_saver})r�rr�filenamer�rt�alpha_depths      rr�r��s���	�w�w�#�~�*����o���~�~�)�)�-�8�F�B�G��E��H�H�U�O�
�:�:�!�!�!��H�H�V�[�[��q�
!�"��z�z���&�0�!�a�K����
������T�;�/�0�
������T�8�#8�#8�9�:�
������T�;�/�0�
������T�1�%�&�
������T�1�%�&��H�H�V�[�[��
)����
)�*����
������T�1�%�&�
������T�1�%�&�
�O�O�B��Y�_�_�U�F�R�W�W�4D�a����Q�R�Srz.blpr��BLP2rh)r%r�r�ztuple[int, int, int])F)r3r�r4r�r��1tuple[bytearray, bytearray, bytearray, bytearray])r3r�r�r�)rdr�r�r�)r�zImage.Imagerrz	IO[bytes]r�zstr | bytesr�r�)'r��
__future__rr�rxr0�enumr�ior�typingr�rr	rrrr&rHrUr^�NotImplementedErrorr`rerg�	PyDecoderr�r�r��	PyEncoderr�r��
register_openr��register_extension�register_decoder�
register_save�register_encoderrrr�<module>rsm���>#�
�	�
�����
�W�
��w��
�G�
�L�
 %�6�
�6��6�6�6�r2�jC�L	�(�	�,�'Q�9�&�&�'Q�T1�i�)�)�1�h&2�/�&2�R-�/�-�`"��$�$�"�BT�6����L�'�'��w�?������,�,�f�5�����v�{�+�����v�{�+�����L�'�'��/�����u�j�)r

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists