o
    Ñ­jæ.  ã                   @  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 e d¡Zer5ddlmZ dZd	Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ dƒZG dd„ de
j
ƒZd3d d!„Zd4d%d&„Ze	 ejee¡ e	 ejd'¡ e	 eje¡ e	 ejd(¡ e d)k�re!ej"ƒd*k r˜e#d+ƒ e $¡  e%ej"d d,ƒ�[Z&ee&ƒZ'e'j(d- D ]Z)e) \Z*Z+Z,e'_)e' -d.e*› d/e+› d/e,› d0�¡ qªe	 %ej"d ¡�Z.e. -d1¡ W d  ƒ n1 sÜw   Y  ej/d2króe 0d1¡ W d  ƒ dS W d  ƒ dS 1 sþw   Y  dS dS )5é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeaturesÚjpg_2000)ÚJpeg2KImagePlugins   icnsé   c                 C  s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)Úfobj© r   úP/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/IcnsImagePlugin.pyÚ
nextheader%   s   r   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   Ústart_lengthÚsizeÚ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¡}|sXn7|d }|d@ rv|d	 }|  d¡}t|ƒD ]}|
 |¡ qmn|d }|
 |  |¡¡ ||8 }|dkr‹n|dksP|dkrŸd
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ÚimÚputband)r   r   r   r   r   Ú
pixel_sizeÚsizesqÚindatar-   Úband_ixÚdataÚ	bytesleftÚbyteÚ	blocksizeÚir   Úbandr   r   r   r   4   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   r/   r0   r8   r   r   r   Úread_mk_   s   
 r:   c           
      C  sè   |\}}|   |¡ |  d¡}|d d… dkr*|   |¡ t | ¡}t |j¡ d|iS |d d… dks>|d d… dks>|dkrntsFd	}t|ƒ‚|   |¡ |  |¡}t	 
|¡}	t |	¡}t |j¡ |jdkrj| d¡}d|iS d
}t|ƒ‚)Né   r   s   ‰PNG

ÚRGBAr   s   ÿOÿQs   
‡
s      jP  
‡
zQUnsupported icon subimage format (rebuild PIL with JPEG 2000 support to fix this)z Unsupported icon subimage format)r   r   r   ÚPngImageFiler   Ú_decompression_bomb_checkr   Úenable_jpeg2kÚ
ValueErrorÚioÚBytesIOr
   ÚJpeg2KImageFileÚmodeÚconvert)
r   r   r   r   r   r   r-   r   Ú
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000i   s2   



ÿ





rH   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„ Zdd„ Z	dd„ Z
dd„ Zd dd„ZdS )!ÚIcnsFileó   ic10ó   ic09ó   ic14ó   ic08ó   ic13ó   ic07s   it32s   t8mks   icp6ó   ic12s   ih32s   h8mks   icp5s   il32s   l8mkó   ic11s   icp4s   is32s   s8mk))é   rR   r   )rR   rR   r   )é   rS   r   )rS   rS   r   )r#   r#   r   )r#   r#   r   )é@   rT   r   )é    rU   r   )é0   rV   r   )rU   rU   r   )é   rW   r   )rW   rW   r   c                 C  sž   i  | _ }|| _t|ƒ\}}t|ƒsd}t|ƒ‚t}||k rMt|ƒ\}}|dkr.d}t|ƒ‚|t7 }|t8 }||f||< | |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   rA   ÚSEEK_CUR)Úselfr   rX   r   Úfilesizer   r7   r6   r   r   r   Ú__init__§   s$   
÷zIcnsFile.__init__c                 C  sB   g }| j  ¡ D ]\}}|D ]\}}|| jv r| |¡  nqq|S ©N)ÚSIZESÚitemsrX   r*   )r[   Úsizesr   ÚfmtsÚfmtÚreaderr   r   r   Ú	itersizes¾   s   

þ€zIcnsFile.itersizesc                 C  s    |   ¡ }|sd}t|ƒ‚t|ƒS )NzNo 32bit icon resources found)re   r   Úmax)r[   ra   r   r   r   r   ÚbestsizeÇ   s
   zIcnsFile.bestsizec                 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   Údescr   r   r   ÚdataforsizeÎ   s   €zIcnsFile.dataforsizeNc                 C  s„   |d u r|   ¡ }t|ƒdkr|d |d df}|  |¡}| dd ¡}|r&|S | d¡ ¡ }z
| |d ¡ W |S  tyA   Y |S w )Nr   r   r   r<   r!   r9   )rg   Úlenrl   rh   ÚcopyÚputalphaÚKeyError)r[   r   Úchannelsr-   r   r   r   ÚgetimageÛ   s    
þþzIcnsFile.getimager^   )Ú__name__Ú
__module__Ú__qualname__rH   r   r:   r   r_   r]   re   rg   rl   rr   r   r   r   r   rI   ‹   s8    ýýýì	rI   c                   @  sD   e Zd ZdZdZdZddd„Zedd	„ ƒZej	d
d	„ ƒZ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.
    ÚICNSzMac OS icns resourceÚreturnÚNonec                 C  s\   t | jƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )Nr<   ra   r   r   r   )	rI   ÚfpÚicnsÚ_modere   Úinforg   Ú	best_sizer   ©r[   r   r   r   Ú_open   s   
þzIcnsImageFile._openc                 C  s   | j S r^   )Ú_sizer   r   r   r   r   
  s   zIcnsImageFile.sizec                 C  sª   |}|| j d vrt|ƒdkr|d |d df}|| j d vrCt|ƒdkrC|d dkrCdd„ | j d D ƒ}||v rC| j d | |¡ }|| j d vrPd}t|ƒ‚|| _d S )	Nra   r   r   r   r    c                 S  s,   g | ]}|d  |d  |d |d  f‘qS )r   r   r   r   )Ú.0r   r   r   r   Ú
<listcomp>  s     ÿz&IcnsImageFile.size.<locals>.<listcomp>z2This is not one of the allowed sizes of this image)r}   rm   Úindexr@   r�   )r[   ÚvalueÚ	info_sizeÚsimple_sizesr   r   r   r   r     s   ÿ
c                 C  s¢   t | jƒdkr | j| _| jd | jd  | jd | jd  f| _tj | ¡}| jd ur4| jj| jkr4|S |  ¡  | j | j¡}| ¡ }|j| _|j	| _
|j| _|S )Nr    r   r   r   )rm   r   r~   r   Úloadr-   Úload_preparer{   rr   rD   r|   )r[   Úpxr-   r   r   r   rˆ   "  s   þzIcnsImageFile.loadN)rx   ry   )rs   rt   ru   Ú__doc__ÚformatÚformat_descriptionr€   Úpropertyr   Úsetterrˆ   r   r   r   r   rv   ò   s    




rv   r-   úImage.Imagerz   ú	IO[bytes]Úfilenameústr | bytesrx   ry   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 ¡ q·t |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#   rS   rR   i   rU   rT   )rO   rM   rK   rJ   rQ   rP   rN   rL   c                 S  s   i | ]}|j |“qS r   )Úwidth)r‚   r-   r   r   r   Ú
<dictcomp>N  s    z_save.<locals>.<dictcomp>Úappend_imagesÚpngr   c                 s  s   � | ]}|d  V  qdS )r   Nr   )r‚   Úentryr   r   r   Ú	<genexpr>d  s   € z_save.<locals>.<genexpr>z>is   TOC r   r   r   N)Úhasattrr”   Úencoderinforh   ÚsetÚvaluesÚresizerA   rB   ÚsaveÚgetvaluer`   r*   r   rm   ÚwriteÚMAGICÚsumr   Úpack)r-   rz   r’   ra   Úprovided_imagesÚsize_streamsr   ÚimageÚtempÚentriesÚtypeÚstreamÚfile_lengthr™   r   r   r   Ú_save<  sT   
ø
ÿý


ÿr®   ÚprefixÚbytesÚboolc                 C  s   | d d… t kS )Nr   )r£   )r¯   r   r   r   rY   x  s   rY   z.icnsz
image/icnsÚ__main__r   z)Syntax: python3 IcnsImagePlugin.py [file]Úrbra   zout-ú-z.pngzout.pngÚwindows)r-   r�   rz   r‘   r’   r“   rx   ry   )r¯   r°   rx   r±   )1Ú
__future__r   rA   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Úcheck_codecr?   r
   r£   r   r   r   r   r:   rH   rI   rv   r®   rY   Úregister_openrŒ   Úregister_extensionÚregister_saveÚregister_mimers   rm   ÚargvÚprintÚexitÚopenrz   Úimfr}   r   r•   ÚheightÚscaler    r-   ÚplatformÚ	startfiler   r   r   r   Ú<module>   sV   
+
"g
J
<
 ÿ
ø"ùû