o
    Ñ­j?  ã                   @  s"  U d dl mZ d dlZd dl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 ddlmZ ddlmZ e d¡Ze d	¡Zdad
ed< dad)dd„Zd*dd„ZG dd„ dƒZd+dd„ZG dd„ dejƒZd,d-d$d%„Ze ejee¡ e  eje¡ e !ejd&d'g¡ e "ejd(¡ dS ).é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi32le)Ú	deprecatez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$zstr | bool | NoneÚ	gs_binaryÚreturnÚboolc                  C  sœ   t d u rJtj d¡r*td u r$dd l} dD ]}|  |¡d ur!|a nqdata t duS ztjddgtj	d� da W t duS  t
yI   da Y t duS w t duS )NÚwinr   )Úgswin32cÚgswin64cÚgsFr   z	--version)Ústdout)r	   ÚsysÚplatformÚ
startswithÚgs_windows_binaryÚshutilÚwhichÚ
subprocessÚ
check_callÚDEVNULLÚOSError)r   Úbinary© r   úO/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/EpsImagePlugin.pyÚhas_ghostscript.   s*   þûþþr   Fc                 C  sœ  t ƒ s	d}t|ƒ‚| d \}} }}|\}	}
t|ƒpd}|d | }|d | }d| |
d |
d   }d| |
d |
d   }t ¡ \}}t |¡ d}t|dƒr\tj 	|j
¡r\|j
}nRt ¡ \}}t |¡ |}t|d	ƒ�8}| dtj¡ | ¡ }| d¡ |}|dkrŸ| t|d
ƒ¡}|s�n|t|ƒ8 }| |¡ |dks…W d  ƒ n1 s©w   Y  |r²dnd}tdd|d›d|d›�d|d›d|d›�dddd|› �d|› �d|
d  › d|
d  › d�d|ddg}z?d}tj d¡rüt ¡ }| jtjO  _tj||d� t |¡}| ¡  W zt |¡ |�rt |¡ W n& t�y&   Y nw zt |¡ |�r7t |¡ W w W w  t�yB   Y w w |j  !¡ }| ¡  |S )z!Render an image using Ghostscriptz%Unable to locate Ghostscript on pathsr   r   g      R@é   é   NÚnameÚwbi � ÚpngalphaÚppmrawz-qz-gÚdÚxz-rÚfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-cú z
 translatez-fÚshowpager   )Ústartupinfo)"r   r   ÚintÚtempfileÚmkstempÚosÚcloseÚhasattrÚpathÚexistsr!   ÚopenÚseekÚioÚSEEK_ENDÚtellÚreadÚminÚlenÚwriter	   r   r   r   r   ÚSTARTUPINFOÚdwFlagsÚSTARTF_USESHOWWINDOWr   r   ÚloadÚunlinkÚimÚcopy)ÚtileÚsizeÚfpÚscaleÚtransparencyÚmsgÚdecoderÚoffsetÚdataÚlengthÚbboxÚwidthÚheightÚres_xÚres_yÚout_fdÚoutfileÚinfile_tempÚinfileÚin_fdr'   ÚfsizeÚ
lengthfileÚsÚdeviceÚcommandr*   Úout_imrA   r   r   r   ÚGhostscriptE   s˜   



û€øï



€ÿü
ÿÿ
r]   c                   @  s0   e Zd ZdZdd„ Zejfdd„Zddd	„Zd
S )ÚPSFilez£
    Wrapper for bytesio object that treats either CR or LF as end of line.
    This class is no longer used internally, but kept for backwards compatibility.
    c                 C  s   t dddd� || _d | _d S )Nr^   é   zSIf you need the functionality of this class you will need to implement it yourself.)Úaction)r   rE   Úchar)ÚselfrE   r   r   r   Ú__init__¨   s   ý
zPSFile.__init__c                 C  s   d | _ | j ||¡ d S ©N)ra   rE   r4   )rb   rJ   Úwhencer   r   r   r4   ²   s   zPSFile.seekr
   Ústrc                 C  s‚   | j pdg}d | _ | j d¡}|dvr*t|ƒr*| |¡ | j d¡}|dvr*t|ƒs| j d¡| _ | j dv r9d | _ d |¡ d¡S )Nó    r   ó   
úlatin-1)ra   rE   r8   r:   ÚappendÚjoinÚdecode)rb   rY   Úcr   r   r   Úreadline¶   s   
þ
zPSFile.readlineN)r
   rf   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rc   r5   ÚSEEK_SETr4   rn   r   r   r   r   r^   ¢   s
    
r^   ÚprefixÚbytesc                 C  s(   | d d… dkpt | ƒdkot| ƒdkS )Né   ó   %!PSì   ÅP§ )r:   Úi32)rt   r   r   r   Ú_acceptÇ   s   (rz   c                   @  sL   e Zd ZdZdZdZdddddœZddd„Zdd„ Zddd„Z	ddd„Z
dS )ÚEpsImageFilez.EPS File Parser for the Python Imaging LibraryÚEPSzEncapsulated PostscriptÚLÚLABÚRGBÚCMYK)r   r   r    rv   r
   ÚNonec                   sª  ˆ  ˆj¡\‰ ‰ˆj ˆ¡ dˆ_d ˆ_tdƒ}t|ƒ}d}d}d‰d‰d'‡fdd	„}d(‡ ‡‡‡‡fdd„}	 ˆj d¡}|dkrL|dkrK|rJ|ƒ  nþn0|dv rV|dkrUq6n&|dkrq|d tdƒkrhd}t	|ƒ‚|ro|ƒ  d}d}|d ||< |d7 }q6|rÓ|d tdƒksŽ|d d… dkr”|ƒ  d}q6t
|d |… dƒ}	||	ƒsÒt |	¡}
|
rÅ|
 d¡}|d d… dkr¿|dd … ˆjd< n‡dˆj|< n�|	d dkrÌnzd}t|ƒ‚ns|d d… dk�r|d|…  d d¡}dd „ |d d!… D ƒ\}}}}|dkrýd"ˆ_n|dk�rzˆj| ˆ_W n t�y   Y n5w n3||fˆ_d S |d d#… d$k�r'n"ˆ�r;ˆ�r;t
|d |… dƒ}	||	ƒ n|d d… d%k�rFd‰d}q7ˆj�sSd&}t|ƒ‚d S ))Nr   éÿ   r   TFr
   r�   c                    s0   dˆ j vrd} t| ƒ‚dˆ j vrd} t| ƒ‚dS )zí
            The EPS specification requires that some headers exist.
            This should be checked when the header comments formally end,
            when image data starts, or when the file ends, whichever comes first.
            úPS-Adobez'EPS header missing "%!PS-Adobe" commentÚBoundingBoxz*EPS header missing "%%BoundingBox" commentN)ÚinfoÚSyntaxError)rH   )rb   r   r   Úcheck_required_header_commentsè   s   

þz:EpsImageFile._open.<locals>.check_required_header_commentsrY   rf   r   c              
     sî   zt  | ¡}W n tjy } zd}t|ƒ|‚d }~ww |s dS | dd¡\}}|ˆj|< |dkru|dkr9d‰dS ˆjr@ˆruˆruz*dd	„ |  ¡ D ƒ}|d |d
  |d |d  fˆ_ddˆj ˆˆ |ffgˆ_	W dS  t
yt   Y dS w dS )Núnot an EPS fileFr   r   r„   z(atend)Tc                 S  s   g | ]}t t|ƒƒ‘qS r   )r+   Úfloat)Ú.0Úir   r   r   Ú
<listcomp>
  s    z=EpsImageFile._open.<locals>._read_comment.<locals>.<listcomp>r   r    Úeps©r   r   )ÚsplitÚmatchÚreÚerrorr†   Úgroupr…   Ú_sizerD   rC   Ú	Exception)rY   ÚmÚerH   ÚkÚvÚbox©rL   rJ   Úreading_trailer_commentsrb   Útrailer_reachedr   r   Ú_read_commentõ   s4   
€þ
ö"þþz)EpsImageFile._open.<locals>._read_commentr   rg   rh   ú%rˆ   é   s   %%EndCommentsri   é   rƒ   é	   Ú zbad EPS headerr_   s   %ImageData:é   c                 s  s   � | ]}t |ƒV  qd S rd   )r+   )rŠ   Úvaluer   r   r   Ú	<genexpr>]  s   € 
ÿz%EpsImageFile._open.<locals>.<genexpr>rv   Ú1é   s   %%EOFs	   %%Trailerz!cannot determine EPS bounding box©r
   r�   )rY   rf   r
   r   )Ú_find_offsetrE   r4   Ú_moder”   Ú	bytearrayÚ
memoryviewr8   Úordr†   rf   Úfieldr�   r“   r…   r   r�   Úmode_mapÚ
ValueError)rb   Úbyte_arrÚbytes_mvÚ
bytes_readÚreading_header_commentsr‡   rž   ÚbyterH   rY   r–   r˜   Úimage_data_valuesÚcolumnsÚrowsÚ	bit_depthÚmode_idr   r›   r   Ú_openØ   s¤   ýÿ 

ò
ÿ
ÿ

œfþzEpsImageFile._openc                 C  sp   |  d¡}|dkr| dtj¡ | ¡ }d}||fS t|ƒdkr2|  d¡}t|ƒ}t|dƒ}||fS d}t|ƒ‚)Nrv   rw   r   rx   r¡   rˆ   )r8   r4   r5   r6   r7   ry   r†   )rb   rE   rY   rL   rJ   rH   r   r   r   rª   {  s   
ó

ýzEpsImageFile._find_offsetr   Fc                 C  sD   | j rt| j | j| j||ƒ| _| jj| _| jj| _g | _ tj 	| ¡S rd   )
rC   r]   rD   rE   rA   Úmoder«   r”   r   r?   )rb   rF   rG   r   r   r   r?   ’  s   

zEpsImageFile.loadÚposr+   c                 C  s   d S rd   r   )rb   r¾   r   r   r   Ú	load_seek›  s   zEpsImageFile.load_seekNr©   ©r   F)r¾   r+   r
   r�   )ro   rp   rq   rr   ÚformatÚformat_descriptionr°   r¼   rª   r?   r¿   r   r   r   r   r{   Ð   s    
 $
	r{   rA   úImage.ImagerE   ú	IO[bytes]Úfilenameústr | bytesr�   r+   r�   c                 C  s˜  |   ¡  | jdkrd}n| jdkrd}n| jdkrd}nd}t|ƒ‚|rT| d¡ | d	¡ | d
| j ¡ | d¡ | d¡ | d¡ | d| j ¡ | d| ¡ | d¡ | d¡ | d| jd |d   ¡ | d| j ¡ | d| j ¡ | d| jd | jd | jd f ¡ | d¡ | |d d ¡ t|dƒr¦| ¡  t | |dd| j ddfg¡ | d¡ | d ¡ t|dƒrÊ| ¡  dS dS )!z*EPS Writer for the Python Imaging Library.r}   )r¡   r   s   imager   )r¡   r    s   false 3 colorimager€   )r¡   rv   s   false 4 colorimagezimage mode is not supporteds   %!PS-Adobe-3.0 EPSF-3.0
s   %%Creator: PIL 0.1 EpsEncode
s   %%%%BoundingBox: 0 0 %d %d
s   %%Pages: 1
s   %%EndComments
s   %%Page: 1 1
s   %%ImageData: %d %d s   %d %d 0 1 1 "%s"
s   gsave
s   10 dict begin
s   /buf %d string def
r   r   s   %d %d scale
s   %d %d 8
s   [%d 0 0 -%d 0 %d]
s+   { currentfile buf readhexstring pop } bind
r   ó   
Úflushr�   rŽ   Ns   
%%%%EndBinary
s   grestore end
)	r?   r½   r±   r;   rD   r0   rÈ   r   Ú_save)rA   rE   rÅ   r�   ÚoperatorrH   r   r   r   rÉ   ¤  sD   









&




ÿrÉ   z.psz.epszapplication/postscript)r
   r   rÀ   )rt   ru   r
   r   )r   )
rA   rÃ   rE   rÄ   rÅ   rÆ   r�   r+   r
   r�   )#Ú
__future__r   r5   r.   r‘   r   r   r,   Útypingr   r£   r   r   Ú_binaryr   ry   Ú
_deprecater   Úcompiler�   r¯   r	   Ú__annotations__r   r   r]   r^   rz   r{   rÉ   Úregister_openrÁ   Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   s4   



]
%	 U4