
    th$                     6   d Z ddlZddlmZ ddlmZmZ ddlmZ	 dZ
dZdZd	Zd
ZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZd	Z dZ!dZ"dZ#e Z$e"Z%e"ez  Z&e#Z'e#ez  Z(eZ)e!Z*eez  ez  ez  Z+eZ,eZ-eZ.eZ/eZ0eZ1eZ2eez  Z3eZ4eez  Z5eez  Z6eez  Z7eez  Z8eez  Z9eez  Z:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFd%ZGd&ZH G d' d(ej                  ZId) ZJd* ZK ejL        eIjM        eIeK            ejN        eIjM        eJ            ejO        eIjM        d+           dS ),a  
A Pillow loader for .dds files (S3TC-compressed aka DXTC)
Jerome Leclanche <jerome@leclan.ch>

Documentation:
  https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt

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/
    N)BytesIO   )Image	ImageFile)o32leiDDS          i   i   i   i   i  @ i   i   i   i    i @  i   i        @   iDXT1iDXT3iDXT5         R   S   T   _   `   a   b   c   c                   "    e Zd ZdZdZd Zd ZdS )DdsImageFileDDSzDirectDraw Surfacec                 	   t          | j                            d                    sd}t          |          t	          j        d| j                            d                    \  }|dk    r!dt          |           }t          |          | j                            |dz
            }t          |          dk    r"dt          |           d}t          |          t          |          }t	          j        d	|                    d
                    \  }}}||f| _
        d| _        t	          j        d	|                    d
                    \  }}	}
t	          j        d|                    d                     t	          j        d|                    d                    \  }}|                    d          }t	          j        d|                    d                    \  }t	          j        d|                    d                    }|t          z  r7|t          z  rd| _        nd| _        dd| j        z   d| j        ddffg| _        d S |t           z  rwd t#          |          D             }d}|t          z  r||d         z  }nd| _        ||d         |d         z   |d         z   z  }dd| j        z   d|d d d         ddffg| _        d S |dz   }d}|d k    rd!| _        d}n|d"k    rd#| _        d$}n|d%k    rd&| _        d'}n|d(k    rd)| _        d}d| _        n|d*k    rd+| _        d,}d| _        n|d-k    rd.| _        d,}d| _        nz|d/k    rR|d0z  }t	          j        d| j                            d                    \  }| j                            d           |t&          t(          fv rd+| _        d,}d| _        n|t*          k    rd.| _        d,}d| _        n|t,          k    rd1| _        d2}d| _        n|t.          k    rd3| _        d2}d| _        n|t0          t2          fv r
d4| _        d5}n|t4          k    rd4| _        d6| j        d7<   d5}nv|t8          t:          t<          fv r+dd| j        z   dd8fg| _        |t<          k    r
d6| j        d7<   d S d9| }t?          |          d:t          |           }t?          |          d;d| j        z   ||| j        ffg| _        d S )<Nr	   znot a DDS filez<I|   zUnsupported header size x   zIncomplete header: z bytesz<3I   RGBAz<11I,   z<2Ir
   z<4I   LALrawr   r   r   r   c                 *    i | ]\  }}|g d |         S ))RGBA ).0imasks      f/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/DdsImagePlugin.py
<dictcomp>z&DdsImageFile._open.<locals>.<dictcomp>   s*    SSSwq$T///2SSS           ~ RGB         s   DXT1DXT1s   DXT3DXT3r   s   DXT5DXT5   s   ATI1BC4s   ATI2BC5   s   BC5SBC5Ss   DX10   BC6H   BC6HSBC7   g]tE?gamma)r   r   r   zUnimplemented DXGI format zUnimplemented pixel format bcn) _acceptfpreadSyntaxErrorstructunpackreprOSErrorlenr   _sizemodeDDPF_LUMINANCEDDPF_ALPHAPIXELSsizetileDDPF_RGB	enumeratepixel_formatDXGI_FORMAT_BC5_TYPELESSDXGI_FORMAT_BC5_UNORMDXGI_FORMAT_BC5_SNORMDXGI_FORMAT_BC6H_UF16DXGI_FORMAT_BC6H_SF16DXGI_FORMAT_BC7_TYPELESSDXGI_FORMAT_BC7_UNORMDXGI_FORMAT_BC7_UNORM_SRGBinfoDXGI_FORMAT_R8G8B8A8_TYPELESSDXGI_FORMAT_R8G8B8A8_UNORMDXGI_FORMAT_R8G8B8A8_UNORM_SRGBNotImplementedError)selfmsgheader_sizeheader_bytesheaderflagsheightwidthpitchdepthmipmapspfsizepfflagsfourccbitcountmasksrawmode
data_startndxgi_formats                       r/   _openzDdsImageFile._opens   s>   tw||A'' 	#"Cc"""tTW\\!__==#@T+->->@@C#,,w||K!O44|##AL(9(9AAAC#,,&&%}UFKKOODDvuV_
	 &eV[[__ E Eugffkk"oo... !-v{{1~~>>QmD&++a..99eV[[__55^# Y	))   			$)!3QAq8IJKDIIIx Q	SS)EBRBRSSSEG)) "5,,!	uXv6tDDG$)!3Q218MNODIII$qJA  $*!7""$*!7""$*!7""$)!		7""$)!!		7""$*!!		7""b 
!'tTW\\!__!E!ER   #;=R"SSS(-D%A %DII $999(.D%A %DII $999(.D%A %DII $999(/D%A %DII %=?T$UUU(-D%AA $>>>(-D%)0DIg&AA 1.3%  
 #($));Q!O PDI"&EEE-4	'*FD{DDC-c222BDLLBB)#... *JD<M8NODIIIr1   c                     d S Nr+   )rh   poss     r/   	load_seekzDdsImageFile.load_seek   s    r1   N)__name__
__module____qualname__formatformat_descriptionr|   r   r+   r1   r/   r   r   o   sA        F-s s sj    r1   r   c           
         | j         dvrd| j          d}t          |          | j         }g d}| j         dv rt          }nt          }|d d d         }| j         dv r|t          z  }|                    d           t          |          d	z  }t          |          d
k     r(|                    d           t          |          d
k     (|                    t          t                    t          d          z   t          t          t          z  t          z  t          z  t          z            z   t          | j                  z   t          | j                  z   t          | j        |z  dz   d	z            z   t          d          z   t          d          z   t          d          dz  z   t          d          z   t          |          z   t          d          z   t          |          z   d                    d |D                       z   t          t$                    z   t          d          z   t          d          z   t          d          z   t          d          z              | j         dk    r2|                                 \  }}	}
}t)          j        d|||	|
f          } t-          j        | |dd| j        z   d|ddffg           d S )N)r4   r   r#   r"   zcannot write mode z as DDS)r5   r6   r7   )r#   r"   r8   )r"   r   r3   r
   r	   r   r   rF      r   r1   c              3   4   K   | ]}t          |          V  d S r~   )o32)r,   r.   s     r/   	<genexpr>z_save.<locals>.<genexpr>  s(      //3t99//////r1   r   r$   r%   r   )rS   rP   rT   rX   rU   appendrQ   writer   	DDS_MAGIC	DDSD_CAPSDDSD_HEIGHT
DDSD_WIDTH
DDSD_PITCHDDSD_PIXELFORMATrn   ro   joinDDSCAPS_TEXTUREsplitr   merger   _saverV   )imrJ   filenameri   rx   rw   pixel_flagsrv   rgbas               r/   r   r      s   	w000327333cllgG$$$E	w+$$$B$-	w.  ''Z   5zzA~H
e**q..Q e**q.. HHI
c((	
#j0:=@PP
 
	

 bi..	 bh--	 rx("Q&1,
-
-	. a&&	 a&&		 a&&2+
	 b''	 k

	 a&&	 h--	 ((/////
/
/	0  o

!	" a&&#	$ a&&%	& a&&'	( a&&)	  . 
w&XXZZ
1a[!Q1..OBeVbg%5q7Aq/JKLLLLLr1   c                     | d d         dk    S )Nr	   s   DDS r+   )prefixs    r/   rI   rI     s    "1":  r1   z.dds)P__doc__rM   ior   r2   r   r   _binaryr   r   r   r   r   r   r   r   DDSD_MIPMAPCOUNTDDSD_LINEARSIZE
DDSD_DEPTHDDSCAPS_COMPLEXr   DDSCAPS_MIPMAPDDSCAPS2_CUBEMAPDDSCAPS2_CUBEMAP_POSITIVEXDDSCAPS2_CUBEMAP_NEGATIVEXDDSCAPS2_CUBEMAP_POSITIVEYDDSCAPS2_CUBEMAP_NEGATIVEYDDSCAPS2_CUBEMAP_POSITIVEZDDSCAPS2_CUBEMAP_NEGATIVEZDDSCAPS2_VOLUMErU   
DDPF_ALPHADDPF_FOURCCDDPF_PALETTEINDEXED8rX   rT   
DDS_FOURCCDDS_RGBDDS_RGBADDS_LUMINANCEDDS_LUMINANCEA	DDS_ALPHADDS_PAL8DDS_HEADER_FLAGS_TEXTUREDDS_HEADER_FLAGS_MIPMAPDDS_HEADER_FLAGS_VOLUMEDDS_HEADER_FLAGS_PITCHDDS_HEADER_FLAGS_LINEARSIZE
DDS_HEIGHT	DDS_WIDTHDDS_SURFACE_FLAGS_TEXTUREDDS_SURFACE_FLAGS_MIPMAPDDS_SURFACE_FLAGS_CUBEMAPDDS_CUBEMAP_POSITIVEXDDS_CUBEMAP_NEGATIVEXDDS_CUBEMAP_POSITIVEYDDS_CUBEMAP_NEGATIVEYDDS_CUBEMAP_POSITIVEZDDS_CUBEMAP_NEGATIVEZDXT1_FOURCCDXT3_FOURCCDXT5_FOURCCrd   re   rf   r[   r\   r]   r^   r_   r`   ra   rb   r   r   rI   register_openr   register_saveregister_extensionr+   r1   r/   <module>r      s  
 
                ! ! ! ! ! ! 	 	

  
  " " # # # #   
 
 

&&"22	${2Z?BRR * $ # - 
	+ *^; + (+EE (+EE (+EE (+EE (+EE (+EE    
 !#  "$         z z z z z9& z z zz.M .M .Mb! ! !  L'w ? ? ?  L' / / /  ,f 5 5 5 5 5r1   