o
    õ·iÓB  ã                   @  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 e d¡Ze d¡Zdad	ed
< dad-dd„Z		d.d/dd„Zd0dd„ZG d d!„ d!ejƒZd1d2d(d)„Ze ejee¡ e eje¡ e ejd*d+g¡ e ejd,¡ dS )3é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi32lez^%%([^:]*):[ \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 q$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   )Zgswin32cZgswin64cÚgsFr   z	--version)Ústdout)r   ÚsysÚplatformÚ
startswithÚgs_windows_binaryÚshutilÚwhichÚ
subprocessÚ
check_callÚDEVNULLÚOSError)r   Úbinary© r   úXC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\PIL/EpsImagePlugin.pyÚhas_ghostscript-   s*   þûþþr   FÚtileúlist[ImageFile._Tile]Úsizeútuple[int, int]Úfpú	IO[bytes]ÚscaleÚintÚtransparencyúImage.core.ImagingCorec                 C  s  t ƒ s	d}t|ƒ‚tttƒsJ ‚| d j}t|tƒsJ ‚|\}}t|ƒp%d}|d | }	|d | }
d|	 |d |d   }d|
 |d |d   }t 	¡ \}}t
 |¡ d}t|dƒrgt
j |j¡rg|j}nRt 	¡ \}}t
 |¡ |}t|d	ƒ�8}| dtj¡ | ¡ }| d¡ |}|dkrª| t|d
ƒ¡}|s›qª|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}zwd}tj d¡�r	t ¡ }| jtjO  _tj ||d� t! |¡�-}| "¡  |j# $¡ W  d  ƒ W zt
 %|¡ |�r6t
 %|¡ W S W S  t�yA   Y S w 1 �sFw   Y  W zt
 %|¡ |�r]t
 %|¡ W dS W dS  t�yj   Y dS w zt
 %|¡ |�r{t
 %|¡ W w W w  t�y†   Y w w )z!Render an image using Ghostscriptz%Unable to locate Ghostscript on pathsr   r   g      R@é   é   NÚnameÚwbi � ZpngalphaZpnmrawz-qz-gÚdÚxz-rÚfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-cú z
 translatez-fZshowpager   )Ústartupinfo)&r   r   Ú
isinstancer   ÚstrÚargsÚtupler#   ÚtempfileÚmkstempÚosÚcloseÚhasattrÚpathÚexistsr(   ÚopenÚseekÚioÚSEEK_ENDÚtellÚreadÚminÚlenÚwriter   r   r   r   ÚSTARTUPINFOÚdwFlagsÚSTARTF_USESHOWWINDOWr   r   ÚloadÚimÚcopyÚunlink)r   r   r    r"   r$   Úmsgr1   ÚlengthZbboxÚwidthÚheightZres_xZres_yZout_fdÚoutfileZinfile_tempÚinfileZin_fdr,   ÚfsizeZ
lengthfileÚsZdeviceÚcommandr.   Zout_imr   r   r   ÚGhostscriptD   s°   	




û€øïþ
ÿÿø
ÿÿü
ÿÿrS   ÚprefixÚbytesc                 C  s"   |   d¡pt| ƒdkot| ƒdkS )Nó   %!PSé   ì   ÅP§ )r   rA   Úi32)rT   r   r   r   Ú_accept¬   s   
ÿrZ   c                   @  sR   e Zd ZdZdZdZdddddœZddd„Zd dd„Z	d!d"dd„Z	d#dd„Z
dS )$ÚEpsImageFilez.EPS File Parser for the Python Imaging LibraryZEPSzEncapsulated PostscriptÚLZLABÚRGBÚCMYK)r   r&   r'   rW   r	   ÚNonec                   s:  ˆj d usJ ‚ˆ ˆj ¡\}}ˆj  |¡ dˆ_d ‰ d }tdƒ}t|ƒ}d}d}d‰d‰d-‡fdd	„}d.‡ ‡‡‡fdd„}		 ˆj  d¡}
|
dkrT|dkrS|rQ|ƒ  �qon0|
dv r^|dkr]q=n&|dkry|d tdƒkrpd}t|ƒ‚|rw|ƒ  d}d}|
d ||< |d7 }q=|rØ|d tdƒks–|d d… dkrœ|ƒ  d}q=t	|d |… dƒ}|	|ƒs×t
 |¡}|rÊ| d¡}| d¡rÄ|dd … ˆjd< n¨dˆj|< n¢|d dkrÑn›d}t|ƒ‚n”|d d… dk�r(|ræd}q=|d|…  d d¡}dd„ |d d … D ƒ\}}}}|dk�rd!ˆ_n|d"k�r!zˆj| ˆ_W n t�y    Y �qow �qo||f}nD|d d#… d$k�r3�qoˆ�rGˆ�rGt	|d |… dƒ}|	|ƒ n%|d d… d%k�rSd‰n|d d&… d'k�rlt|d&|… ƒ}ˆj  |tj¡ d}q>ˆ �sxd(}t|ƒ‚|�pŠˆ d) ˆ d  ˆ d* ˆ d  fˆ_t d+d,ˆj ||ˆ f¡gˆ_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)rJ   )Úselfr   r   Úcheck_required_header_commentsÔ   s   

þz:EpsImageFile._open.<locals>.check_required_header_commentsrQ   r0   r
   c              
     s°   zt  | ¡}W n tjy } zd}t|ƒ|‚d }~ww |s dS | dd¡\}}|ˆj|< |dkrV|dkr9d‰dS ˆ r?ˆrVˆrVzdd	„ |  ¡ D ƒ‰ W dS  tyU   Y dS w dS )
Núnot an EPS fileFr   r&   rb   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>)ÚsplitÚmatchÚreÚerrorrd   Úgrouprc   Ú	Exception)rQ   ÚmÚerJ   ÚkÚv©Zbounding_boxZreading_trailer_commentsre   Ztrailer_reachedr   r   Úread_commentá   s0   
€þ
	øþþz(EpsImageFile._open.<locals>.read_commentr   ó    s   
ú%rg   é   s   %%EndCommentszlatin-1ra   é	   Ú zbad EPS headeré   s   %ImageData:é   c                 s  s   � | ]}t |ƒV  qd S ©N)r#   )ri   Úvaluer   r   r   Ú	<genexpr>M  s   € 
ÿz%EpsImageFile._open.<locals>.<genexpr>rW   Ú1é   é   s   %%EOFs	   %%Traileré   s   %%BeginBinary:z!cannot determine EPS bounding boxr&   r'   Úeps©r   r   ©r	   r_   )rQ   r0   r	   r
   )r    Ú_find_offsetr;   Ú_modeÚ	bytearrayÚ
memoryviewr?   Úordrd   r0   Úfieldrm   rp   r   rc   r   rl   Úmode_mapÚ
ValueErrorr#   r5   ÚSEEK_CURÚ_sizer   Ú_Tiler   r   )re   rK   ÚoffsetZimagedata_sizeZbyte_arrZbytes_mvÚ
bytes_readZreading_header_commentsrf   rw   ÚbyterJ   rQ   rr   rt   Zimage_data_valuesÚcolumnsÚrowsZ	bit_depthZmode_idZ	bytecountr   rv   r   Ú_open¿   s¼   ýÿ 


ò
ÿ

ÿ

’rþ
ÿzEpsImageFile._openr    r!   r   c                 C  sp   |  d¡}|dkr| dtj¡ | ¡ }d}||fS t|ƒdkr2|  d¡}t|ƒ}t|dƒ}||fS d}t|ƒ‚)NrW   rV   r   rX   rƒ   rg   )r?   r;   r<   r=   r>   rY   rd   )re   r    rQ   rK   r”   rJ   r   r   r   r‰   {  s   
ó

ýzEpsImageFile._find_offsetr   Fr"   r#   r$   r
   úImage.core.PixelAccess | Nonec                 C  sR   | j r#| jd us
J ‚t| j | j| j||ƒ| _| jj| _| jj| _g | _ tj 	| ¡S r   )
r   r    rS   r   rG   ÚmoderŠ   r’   r   rF   )re   r"   r$   r   r   r   rF   ’  s   

zEpsImageFile.loadÚposc                 C  s   d S r   r   )re   rœ   r   r   r   Ú	load_seekž  s   zEpsImageFile.load_seekNrˆ   )r    r!   r	   r   ©r   F)r"   r#   r$   r
   r	   rš   )rœ   r#   r	   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚformatÚformat_descriptionr�   r™   r‰   rF   r�   r   r   r   r   r[   ·   s    
 
=ÿr[   rG   úImage.ImageÚfilenameústr | bytesr†   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 | |t 	dd| j ¡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ƒ   rW   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‡   s   
%%%%EndBinary
s   grestore end
N)
rF   r›   r�   rB   r   r7   r©   r   Ú_saver“   )rG   r    r¦   r†   ÚoperatorrJ   r   r   r   rª   §  sD   









&




ÿrª   z.psz.epszapplication/postscript)r	   r
   rž   )r   r   r   r   r    r!   r"   r#   r$   r
   r	   r%   )rT   rU   r	   r
   )r   )
rG   r¥   r    r!   r¦   r§   r†   r#   r	   r_   ) Ú
__future__r   r<   r5   rn   r   r   r3   Útypingr   r|   r   r   Ú_binaryr   rY   Úcompilerl   rŽ   r   Ú__annotations__r   r   rS   rZ   r[   rª   Zregister_openr£   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s4   


û
h q4