a
    h2                     @  sV  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rvddlmZ d	Zd
ZdddddZdddddddZdddddddZdddddddZdddddddZG dd dZG dd de
j
Zd dd!d"d#d$d%Zd&d'd(d)d*Ze	ejee e	ejd+ e	 eje e	!ejd, e"d-krRe#ej$d.k re%d/ e&  e'ej$d d0Z(ee(Z)e)j*d1 D ]4Z+e+ \Z,Z-Z.e)_+e)/d2e, d3e- d3e. d4 qe	'ej$d Z0e0/d5 W d   n1 s0    Y  ej1d6kr2e2d5 W d   n1 sH0    Y  dS )7    )annotationsN)IO   )Image	ImageFilePngImagePluginfeatures)	deprecateZjpg_2000)Jpeg2KImagePlugins   icns   	IO[bytes]ztuple[bytes, int]fobjreturnc                 C  s   t d| tS )Nz>4sI)structunpackread
HEADERSIZE)r    r   A/var/www/auris/lib/python3.9/site-packages/PIL/IcnsImagePlugin.py
nextheader&   s    r   ztuple[int, int]tuple[int, int, int]dict[str, Image.Image])r   start_lengthsizer   c                 C  sH   |\}}|  | | d}|dkr0d}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  sp  |\}}|  | |d |d  |d |d  f}|d |d  }||d krp| |}td||dddd}ntd|d}tdD ]}	g }
|}|dkr| d}|sq|d }|d@ r|d	 }| d}t|D ]}|
| qn|d }|
| | ||8 }|dkrqq|dkr:d
t| d}t|td|d	|
dddd}|j
|j
|	 qd|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indatar2   Zband_ixdataZ	bytesleftbyteZbyte_int	blocksizeir"   bandr   r   r   r   7   s@    
 




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   r3   r4   r9   r   r   r   read_mkd   s    
 r;   c           
      C  s   |\}}|  | | d}|drN|  | t| }t|j d|iS |ds`|dkrtspd}t	||  | | |}t
|}	t|	}t|j |jdkr|d}d|iS d}t	|d S )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!   r2   r"   Z
jp2kstreamfr   r   r   read_png_or_jpeg2000p   s4    










rF   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ddZddddZ	dddd Z
dd!d"d#d$Zd*d&d'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))   rP   r$   )rP   rP   r   )   rQ   r$   )rQ   rQ   r   )r(   r(   r$   )r(   r(   r   )@   rR   r   )    rS   r$   )0   rT   r   )rS   rS   r   )   rU   r$   )rU   rU   r   r   Noner   c                 C  s   i | _ || _t|\}}t|s,d}t|t}||k rt|\}}|dkrXd}t||t7 }|t8 }||f| j |< ||tj ||7 }q0d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   r!   filesizer"   r8   r7   r   r   r   __init__   s"    zIcnsFile.__init__zlist[tuple[int, int, int]]r   c                 C  sB   g }| j  D ].\}}|D ] \}}|| jv r||  qqq|S N)SIZESitemsrW   r/   )rZ   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)rd   r   max)rZ   ra   r"   r   r   r   bestsize   s
    zIcnsFile.bestsizer   )r   r   c                 C  sD   i }| j | D ]0\}}| 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_   rW   getupdater   )rZ   r   rW   coderc   descr   r   r   dataforsize   s    zIcnsFile.dataforsizeNz-tuple[int, int] | tuple[int, int, int] | NoneImage.Imagec                 C  s   |d u r|   }nt|dkr0|d |d df}| |}|d}|rL|S |d  }z||d  W n ty|   Y n0 |S )Nr$   r   r   r=   r&   r:   )rf   lenrk   rg   copyZputalphaKeyError)rZ   r   Zchannelsr2   r   r   r   getimage   s    


zIcnsFile.getimage)N)__name__
__module____qualname__rF   r#   r;   r   r_   r\   rd   rf   rk   rp   r   r   r   r   rG      s8   	 rG   c                   @  s`   e Zd ZdZdZdZddddZeddd	d
Zej	ddddd
Zdd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 resourcerV   r]   c                 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   )	rG   fpicns_moderd   inforf   	best_sizer   rZ   r   r   r   _open  s    zIcnsImageFile._openz&tuple[int, int] | tuple[int, int, int]c                 C  s   | j S r^   )_sizerz   r   r   r   r     s    zIcnsImageFile.size)valuer   c                 C  s   t |dkr2tddd || jd v r|| _d S n`| jd D ]T}|d |d  |d |d  f}|d |d  }|d |d  |kr<|| _ d S q<d	}t|d S )
Nr%   z&Setting size to (width, height, scale)r<   zload(scale)ra   r   r$   r   z2This is not one of the allowed sizes of this image)rm   r	   rx   r|   r@   )rZ   r}   r   Zsimple_sizescaler"   r   r   r   r     s     Nz
int | NonezImage.core.PixelAccess | None)r~   r   c                 C  s   |d ust | jdkrr|d u r6t | jdkr6| jd }|d usBJ | jd d \}}|| || f| _|||f| _tj| }| jd ur| jj| jkr|S |   | j	| j}| }|j| _|j
| _|j| _|S )Nr%   r$   )rm   r   ry   r   loadZ_imr2   Zload_preparerv   rp   rC   rw   )rZ   r~   widthheightZpxr2   r   r   r   r   -  s"    
zIcnsImageFile.load)N)rq   rr   rs   __doc__formatformat_descriptionr{   propertyr   setterr   r   r   r   r   rt      s   

rt   rl   zstr | bytesrV   )r2   ru   filenamer   c              	   C  s  t |dr|  ddddddddd}d	d
 | jdg D }i }t| D ]B}||v rd|| n| ||f}t }|	|d |
 ||< qPg }	| D ](\}
}|| }|	|
tt| |f q|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 ]8}||d  |td|d  ||d  qpt |dr|  dS )za
    Saves the image as a series of PNG files,
    that are then combined into a .icns file.
    flushr(   rQ   rP   i   rS   rR   )rM   rK   rI   rH   rO   rN   rL   rJ   c                 S  s   i | ]}|j |qS r   )r   ).0r2   r   r   r   
<dictcomp>Z  r+   z_save.<locals>.<dictcomp>Zappend_imagesZpngr   c                 s  s   | ]}|d  V  qdS )r   Nr   )r   entryr   r   r   	<genexpr>p  r+   z_save.<locals>.<genexpr>z>is   TOC r   r   r$   N)hasattrr   Zencoderinforg   setvaluesresizerA   rB   savegetvaluer`   r/   r   rm   writeMAGICsumr   pack)r2   ru   r   ra   Zprovided_imagesZsize_streamsr   imagetempentriestypestreamZfile_lengthr   r   r   r   _saveH  sR    




r   bytesbool)prefixr   c                 C  s
   |  tS r^   )r>   r   )r   r   r   r   rX     s    rX   z.icnsz
image/icns__main__r$   z)Syntax: python3 IcnsImagePlugin.py [file]rbra   zout--z.pngzout.pngZwindows)3
__future__r   rA   osr   systypingr    r   r   r   r   Z
_deprecater	   Zcheck_codecr?   r
   r   r   r   r#   r   r;   rF   rG   rt   r   rX   Zregister_openr   Zregister_extensionZregister_saveZregister_mimerq   rm   argvprintexitopenru   Zimfrx   r   r   r   r~   r   r2   platformZ	startfiler   r   r   r   <module>   sL   
-%iJ<
"*