a
    ¥Q•hŠ,  ã                   @   sò   d dl mZmZ d dlmZ d dlmZ d dlmZ dZ	ddddddd	d
dd	dœ
Z
dd„ ZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdd„ Ze ejee¡ e eje¡ e de¡ e de¡ e ejg d¢¡ e ejd¡ dS )é   )ÚImageÚ	ImageFile)Úi16be)Úo8)Úo32les    	
Ú1ÚLÚRGBÚCMYKÚPÚRGBA)
ó   P1ó   P2ó   P3ó   P4ó   P5ó   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                 C   s   | dd… dko| d dv S )Né    r   ó   Ps   0123456y© )Úprefixr   r   úK/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.pyÚ_accept-   s    r   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚPpmImageFileÚPPMzPbmplus imagec                 C   s:   d}t dƒD ](}| j d¡}|r(|tv r, q6||7 }q|S )Nó    é   r   )ÚrangeÚfpÚreadÚb_whitespace)ÚselfÚmagicÚ_Úcr   r   r   Ú_read_magic9   s    
zPpmImageFile._read_magicc                 C   s”   d}t |ƒdkr\| j d¡}|s$q\n.|tv r6|s\qq\n|dkrR| j d¡dvrq>q||7 }q|snd}t|ƒ‚n"t |ƒdkr�d| ¡ › �}t|ƒ‚|S )Nr   é
   r   ó   #s   
z Reached EOF while reading headerzToken too long in file header: )Úlenr   r   r    Ú
ValueErrorÚdecode)r!   Útokenr$   Úmsgr   r   r   Ú_read_tokenC   s*    

zPpmImageFile._read_tokenc                 C   sŽ  |   ¡ }zt| }W n ty2   d}t|ƒ‚Y n0 |dv rDd| _n|dv rTd| _n|dv rbd| _d }d}|d	v rvd
}tdƒD ]Æ}t|  ¡ ƒ}|dkrœ|}q~|dkrÎ|}	|dkrÂd| _d}
 �qFn
| | _}
q~|dkr~|}d|  k rîdk sün d}t	|ƒ‚|dk�r|dk�rd| _|d
kr~|dk�r8|dk�r8d}
q~|dkr~d}q~|dk�rZ|
ddfn|
|f}||	f| _
|dd||	f| j ¡ |fg| _d S )Nznot a PPM file)r   r   zimage/x-portable-bitmap)r   r   zimage/x-portable-graymap)r   r   zimage/x-portable-pixmapÚraw)r   r   r   Ú	ppm_plainé   r   r   r   ú1;Ié   i   z1maxval must be greater than 0 and less than 65536éÿ   r   ÚIéÿÿ  úI;16BÚppm)r%   ÚMODESÚKeyErrorÚSyntaxErrorÚcustom_mimetyper   Úintr-   Ú_moder)   Ú_sizer   ÚtellÚtile)r!   Zmagic_numberÚmoder,   ÚmaxvalÚdecoder_nameÚixr+   ÚxsizeÚysizeÚrawmodeÚargsr   r   r   Ú_open]   sT    
zPpmImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr%   r-   rI   r   r   r   r   r   5   s
   
r   c                   @   sB   e Zd ZdZdd„ Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚPpmPlainDecoderTc                 C   s   | j  tj¡S )N)Úfdr   r   Ú	SAFEBLOCK)r!   r   r   r   Ú_read_block—   s    zPpmPlainDecoder._read_blockr   c                 C   s8   |  d|¡}|  d|¡}|| dkr.t||ƒS t||ƒS )Nó   
ó   r   )ÚfindÚminÚmax)r!   ÚblockÚstartÚaÚbr   r   r   Ú_find_comment_endš   s    z!PpmPlainDecoder._find_comment_endc                 C   s    | j r:|r:|  |¡}|dkr0||d d … }q:q|  ¡ }qd| _ | d¡}|dkrTqœ|  ||¡}|dkr†|d |… ||d d …  }q@|d |… }d| _ qœq@|S )Néÿÿÿÿr   Fr'   T)Ú_comment_spansr\   rR   rU   )r!   rX   Zcomment_endÚcomment_startr   r   r   Ú_ignore_commentsŸ   s$    


z PpmPlainDecoder._ignore_commentsc                 C   s˜   t ƒ }| jj| jj }t|ƒ|kr‚|  ¡ }|s0q‚|  |¡}d | ¡ ¡}|D ]"}|dvrLdt	|gƒ }t
|ƒ‚qL|| d|… }qt	 dd¡}| |¡S )z¥
        This is a separate method because in the plain PBM format, all data tokens are
        exactly one byte, so the inter-token whitespace is optional.
        r   )é0   é1   s   Invalid token for this mode: %sNs   01s   ÿ )Ú	bytearrayÚstaterE   rF   r(   rR   r`   ÚjoinÚsplitÚbytesr)   Ú	maketransÚ	translate)r!   ÚdataÚtotal_bytesrX   Útokensr+   r,   Úinvertr   r   r   Ú_decode_bitonalÁ   s    

zPpmPlainDecoder._decode_bitonalc                 C   s†  t ƒ }d}| jdkrdnd}| jdkr*dnd}t | j¡}| jj| jj | | }d}t|ƒ|k�r‚|  ¡ }	|	s‚|r~t dƒ}	n�q‚|  	|	¡}	|rœ||	 }	d}|	 
¡ }
|	rè|	d	d …  ¡ sè|
 ¡ }t|ƒ|krèd
|d |d …  }t|ƒ‚|
D ]’}t|ƒ|k�rd
|d |d …  }t|ƒ‚t|ƒ}||k�r>d|› �}t|ƒ‚t|| | ƒ}|| jdk�rdt|ƒnt|ƒ7 }t|ƒ|krì qVqìqV|S )Nr&   r4   é   r   r5   r3   Fó    r]   s    Token too long found in data: %sz'Channel value too large for this mode: )rc   rA   r   Úgetmodebandsrd   rE   rF   r(   rR   r`   rf   ÚisspaceÚpopr)   r<   ÚroundÚo32r   )r!   rB   rj   Úmax_lenÚout_byte_countÚout_maxÚbandsrk   Z
half_tokenrX   rl   r,   r+   Úvaluer   r   r   Ú_decode_blocksÚ   sJ    

ÿ

 zPpmPlainDecoder._decode_blocksc                 C   sZ   d| _ | jdkr|  ¡ }d}n(| jd }|  |¡}| jdkr@dn| j}|  t|ƒ|¡ dS )NFr   z1;8r]   r4   úI;32©r]   r   )r^   rA   rn   rH   r{   Ú
set_as_rawrg   )r!   Úbufferrj   rG   rB   r   r   r   r*   
  s    


zPpmPlainDecoder.decodeN)r   )
rJ   rK   rL   Ú	_pulls_fdrR   r\   r`   rn   r{   r*   r   r   r   r   rO   ”   s   
"0rO   c                   @   s   e Zd ZdZdd„ ZdS )Ú
PpmDecoderTc                 C   s  t ƒ }| jd }|dk rdnd}| jdkr.dnd}| jdkr@dnd}t | j¡}t|ƒ| jj| jj | | k rô| j	 
|| ¡}t|ƒ|| k r’qôt|ƒD ]V}	|dkr®||	 nt||	| ƒ}
t|t|
| | ƒƒ}
|| jdkræt|
ƒnt|
ƒ7 }qšqP| jdk�rd	n| j}|  t|ƒ|¡ d
S )Nr]   é   r   r2   r4   ro   r5   r3   r|   r}   )rc   rH   rA   r   rq   r(   rd   rE   rF   rP   r   r   Úi16rV   rt   ru   r   r~   rg   )r!   r   rj   rB   Zin_byte_countrw   rx   ry   Úpixelsr[   rz   rG   r   r   r   r*     s$    
 ÿ"zPpmDecoder.decodeN)rJ   rK   rL   r€   r*   r   r   r   r   r�     s   r�   c              
   C   sÜ   | j dkrd\}}nR| j dkr(d\}}n>| j dkr<d\}}n*| j dv rPd\}}nd	| j › d
�}t|ƒ‚| |d| j  ¡ |dkrŽ| d¡ n&|dkr´|dkrª| d¡ n
| d¡ t | |dd| j d|ddffg¡ d S )Nr   )r1   r   r   )r   r   r4   )r6   r   )r	   r   )r	   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r.   )r   r   r   r   )rA   ÚOSErrorÚwriteÚsizer   Ú_save)Úimr   ÚfilenamerG   Úheadr,   r   r   r   rˆ   5  s$    








rˆ   r7   r/   )z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN)Ú r   r   Ú_binaryr   rƒ   r   r   ru   r    r8   r   r   Ú	PyDecoderrO   r�   rˆ   Úregister_openrM   Úregister_saveÚregister_decoderÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   s6   ó_ 