o
     h2                     @  s&  d dl mZ d dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
mZmZ ddlmZ edZer;ddlmZ d	Zd
Zd;ddZd<ddZd<ddZd<ddZd<ddZG dd dZG d d! d!e
j
Zd=d(d)Zd>d-d.Ze	ejee e	ejd/ e	 eje e	!ejd0 e"d1kre#ej$d2k re%d3 e&  e'ej$d d4[Z(ee(Z)e)j*d5 D ]Z+e+ \Z,Z-Z.e)_+e)/d6e, d7e- d7e. d8 qe	'ej$d Z0e0/d9 W d   n1 sw   Y  ej1d:kre2d9 W d   dS W d   dS 1 s
w   Y  dS dS )?    )annotationsN)IO   )Image	ImageFilePngImagePluginfeatures)	deprecateZjpg_2000)Jpeg2KImagePlugins   icns   fobj	IO[bytes]returntuple[bytes, int]c                 C  s   t d| tS )Nz>4sI)structunpackread
HEADERSIZE)r    r   Y/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/PIL/IcnsImagePlugin.py
nextheader&   s   r   start_lengthtuple[int, int]sizetuple[int, int, int]dict[str, Image.Image]c                 C  sH   |\}}|  | | d}|dkrd}t|t| |d |d f|S )N   s       z'Unknown signature, expecting 0x00000000)seekr   SyntaxErrorread_32)r   r   r   startlengthsigmsgr   r   r   read_32t*   s   

r$   c              
   C  st  |\}}|  | |d |d  |d |d  f}|d |d  }||d kr;| |}td||dddd}d|iS td|d}tdD ]o}	g }
|}|dkr| d}|sXq|d }|d@ rv|d	 }| d}t|D ]}|
| qmn|d }|
| | ||8 }|dkrq|dksP|dkrd
t| d}t|td|d	|
dddd}|j
|j
|	 qFd|iS )zn
    Read a 32bit RGB icon resource.  Seems to be either uncompressed or
    an RLE packbits-like scheme.
    r      r      RGBrawN   }   zError reading channel [z left]L    )r   r   r   
frombuffernewrangeappendreprr   joinimZputband)r   r   r   r    r!   
pixel_sizesizesqZindatar3   Zband_ixdataZ	bytesleftbyteZbyte_int	blocksizeir#   bandr   r   r   r   7   sF   
 


r   c              	   C  sf   |d }|  | |d |d  |d |d  f}|d |d  }td|| |dddd}d|iS )Nr   r%   r   r+   r(   A)r   r   r-   r   )r   r   r   r    r4   r5   r:   r   r   r   read_mkd   s   
 r<   c           
      C  s   |\}}|  | | d}|dr'|  | t| }t|j d|iS |ds0|dkr`ts8d}t	||  | | |}t
|}	t|	}t|j |jdkr\|d}d|iS d}t	|)N   s   PNG

RGBA)s   OQs   

s      jP  

zQUnsupported icon subimage format (rebuild PIL with JPEG 2000 support to fix this)z Unsupported icon subimage format)r   r   
startswithr   ZPngImageFiler   Z_decompression_bomb_checkr   enable_jpeg2k
ValueErrorioBytesIOr
   ZJpeg2KImageFilemodeconvert)
r   r   r   r    r!   r"   r3   r#   Z
jp2kstreamfr   r   r   read_png_or_jpeg2000p   s4   










rG   c                   @  s   e Zd Zdefgdefgdefgdefgdefgdefdefdefgd	efgd
efgdefdefgdefdefdefgdefgdefdefdefgdZd*ddZd+ddZ	d,dd Z
d-d#d$Z	%d.d/d(d)Zd%S )0IcnsFile   ic10   ic09   ic14   ic08   ic13   ic07s   it32s   t8mks   icp6   ic12s   ih32s   h8mks   icp5s   il32s   l8mk   ic11s   icp4s   is32s   s8mk))   rQ   r%   )rQ   rQ   r   )   rR   r%   )rR   rR   r   )r)   r)   r%   )r)   r)   r   )@   rS   r   )    rT   r%   )0   rU   r   )rT   rT   r   )   rV   r%   )rV   rV   r   r   r   r   Nonec                 C  s   i | _ || _t|\}}t|sd}t|t}||k rLt|\}}|dkr,d}t||t7 }|t8 }||f| j |< ||tj ||7 }||k sdS dS )z@
        fobj is a file-like object as an icns resource
        znot an icns filer   zinvalid block headerN)	dctr   r   _acceptr   r   r   rB   SEEK_CUR)selfr   r"   filesizer#   r9   r8   r   r   r   __init__   s$   zIcnsFile.__init__list[tuple[int, int, int]]c                 C  sB   g }| j  D ]\}}|D ]\}}|| jv r||  qqq|S N)SIZESitemsrX   r0   )r[   sizesr   Zfmtsfmtreaderr   r   r   	itersizes   s   

zIcnsFile.itersizesr   c                 C  s    |   }|sd}t|t|S )NzNo 32bit icon resources found)re   r   max)r[   rb   r#   r   r   r   bestsize   s
   zIcnsFile.bestsizer   r   c                 C  sD   i }| j | D ]\}}| j|}|dur||| j|| q|S )z
        Get an icon resource as {channel: array}.  Note that
        the arrays are bottom-up like windows bitmaps and will likely
        need to be flipped or transposed in some way.
        N)r`   rX   getupdater   )r[   r   rX   coderd   Zdescr   r   r   dataforsize   s   zIcnsFile.dataforsizeN-tuple[int, int] | tuple[int, int, int] | NoneImage.Imagec                 C  s   |d u r	|   }nt|dkr|d |d df}| |}|d}|r&|S |d  }z
||d  W |S  ty@   Y |S w )Nr%   r   r   r>   r'   r;   )rg   lenrk   rh   copyZputalphaKeyError)r[   r   Zchannelsr3   r   r   r   getimage   s    


zIcnsFile.getimage)r   r   r   rW   )r   r^   )r   r   )r   r   r   r   r_   )r   rl   r   rm   )__name__
__module____qualname__rG   r$   r<   r   r`   r]   re   rg   rk   rq   r   r   r   r   rH      s:    


	
rH   c                   @  sL   e Zd ZdZdZdZdddZedd	d
Zej	ddd
ZddddZ
dS )IcnsImageFilea!  
    PIL image support for Mac OS .icns files.
    Chooses the best resolution, but will possibly load
    a different size image if you mutate the size attribute
    before calling 'load'.

    The info dictionary has a key 'sizes' that is a list
    of sizes that the icns file has.
    ZICNSzMac OS icns resourcer   rW   c                 C  s\   t | j| _d| _| j | jd< | j | _| jd | jd  | jd | jd  f| _d S )Nr>   rb   r   r%   r   )	rH   fpicns_modere   inforg   	best_sizer   r[   r   r   r   _open  s   
zIcnsImageFile._open&tuple[int, int] | tuple[int, int, int]c                 C  s   | j S r_   )_sizer{   r   r   r   r     s   zIcnsImageFile.sizevaluec                 C  s   t |dkrtddd || jd v r|| _d S n0| jd D ]*}|d |d  |d |d  f}|d |d  }|d |d  |krH|| _ d S qd	}t|)
Nr&   z&Setting size to (width, height, scale)r=   zload(scale)rb   r   r%   r   z2This is not one of the allowed sizes of this image)rn   r	   ry   r~   rA   )r[   r   r   Zsimple_sizescaler#   r   r   r   r     s    Nr   
int | NoneImage.core.PixelAccess | Nonec                 C  s   |d ust | jdkr9|d u rt | jdkr| jd }|d us!J | jd d \}}|| || f| _|||f| _tj| }| jd urM| jj| jkrM|S |   | j	| j}| }|j| _|j
| _|j| _|S )Nr&   r%   )rn   r   rz   r   loadZ_imr3   Zload_preparerw   rq   rD   rx   )r[   r   widthheightZpxr3   r   r   r   r   -  s"   
zIcnsImageFile.load)r   rW   )r   r}   )r   r}   r   rW   r_   )r   r   r   r   )rr   rs   rt   __doc__formatformat_descriptionr|   propertyr   setterr   r   r   r   r   ru      s    


ru   r3   rm   rv   filenamestr | bytesrW   c              	   C  s  t |dr	|  ddddddddd}d	d
 | jdg D }i }t| D ]!}||v r2|| n| ||f}t }|	|d |
 ||< q(g }	| D ]\}
}|| }|	|
tt| |f qP|t t}|tdt|	  7 }|tdd |	D 7 }|td| |d |tdtt|	t   |	D ]}||d  |td|d  q|	D ]}||d  |td|d  ||d  qt |dr|  dS dS )za
    Saves the image as a series of PNG files,
    that are then combined into a .icns file.
    flushr)   rR   rQ   i   rT   rS   )rN   rL   rJ   rI   rP   rO   rM   rK   c                 S  s   i | ]}|j |qS r   )r   ).0r3   r   r   r   
<dictcomp>Z  s    z_save.<locals>.<dictcomp>Zappend_imagesZpngr   c                 s  s    | ]}|d  V  qdS )r   Nr   )r   entryr   r   r   	<genexpr>p  s    z_save.<locals>.<genexpr>z>is   TOC r   r   r%   N)hasattrr   Zencoderinforh   setvaluesresizerB   rC   savegetvaluera   r0   r   rn   writeMAGICsumr   pack)r3   rv   r   rb   Zprovided_imagesZsize_streamsr   imagetempentriestypestreamZfile_lengthr   r   r   r   _saveH  sT   





r   prefixbytesboolc                 C  s
   |  tS r_   )r?   r   )r   r   r   r   rY     s   
rY   z.icnsz
image/icns__main__r%   z)Syntax: python3 IcnsImagePlugin.py [file]rbrb   zout--z.pngzout.pngwindows)r   r   r   r   )r   r   r   r   r   r   r   r   )r3   rm   rv   r   r   r   r   rW   )r   r   r   r   )3
__future__r   rB   osr   systypingr    r   r   r   r   Z
_deprecater	   Zcheck_codecr@   r
   r   r   r   r$   r   r<   rG   rH   ru   r   rY   Zregister_openr   Zregister_extensionZregister_saveZregister_mimerr   rn   argvprintexitopenrv   Zimfry   r   r   r   r   r   r3   platformZ	startfiler   r   r   r   <module>   sX   




-
%i
J
<
 
$