B
    eAdi:                 @   s0  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mZ ddl	m
Z ddlmZ edZedZdZejdrd dlZx$d	D ]Zeedk	reZP qW d
Zdd ZdddZG dd dZdd ZG dd dejZ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 )    N   )Image	ImageFile)i32le)	deprecatez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$win)Zgswin32cZgswin64cgsFc               C   sF   t rdS tjdsBytjddgtjd dS  tk
r@   Y nX dS )NTr   r   z	--version)stdoutF)gs_windows_binarysysplatform
startswith
subprocess
check_callDEVNULLOSError r   r   D/var/www/html/venv/lib/python3.7/site-packages/PIL/EpsImagePlugin.pyhas_ghostscript4   s    r   c             C   s^  | d \}} }}|\}}	t |p"d}|d | |d | f}d|d  |	d |	d   d|d  |	d |	d   f}
t \}}t| d}t|drtj|jr|j}nt \}}t| |}t	|dh}|
dtj | }|
d |}x<|dkr4|t|d	}|sP |t|8 }|| qW W dQ R X |rJd
nd}ddd| d|
 dddd| d| d|	d   d|	d   dd|ddg}tdk	rtsd}t|t|d< zNd}tjdrt }| jtjO  _tj||d t	|}|  W dyt| |r,t| W n tk
rD   Y nX X |j  }|  |S )z!Render an image using Ghostscriptr   r   g      R@      Nnamewbi  ZpngalphaZppmrawr   z-qz-g%dx%dz-r%fx%fz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fZshowpagez%Unable to locate Ghostscript on pathsr   )startupinfo)!inttempfilemkstemposclosehasattrpathexistsr   openseekioSEEK_ENDtellreadminlenwriter
   r   r   r   r   r   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencydecoderoffsetdatalengthZbboxresZout_fdoutfileZinfile_tempinfileZin_fdffsizeZ
lengthfilesZdevicecommandmsgr   Zout_imr.   r   r   r   GhostscriptA   s~    






rA   c               @   s.   e Zd ZdZdd ZejfddZ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 )NrB      zSIf you need the functionality of this class you will need to implement it yourself.)action)r   r2   char)selfr2   r   r   r   __init__   s    zPSFile.__init__c             C   s   d | _ | j|| d S )N)rE   r2   r$   )rF   r6   whencer   r   r   r$      s    zPSFile.seekc             C   sx   | j pdg}d | _ | jd}x*|dkrHt|rH|| | jd}q W | jd| _ | j dkrhd | _ d|dS )N    r   s   
zlatin-1)rE   r2   r(   r*   appendjoindecode)rF   r>   cr   r   r   readline   s    

zPSFile.readlineN)	__name__
__module____qualname____doc__rG   r%   SEEK_SETr$   rN   r   r   r   r   rB      s   
rB   c             C   s(   | d d dkp&t | dko&t| dkS )N   s   %!PSl   P )r*   i32)prefixr   r   r   _accept   s    rW   c               @   sH   e Zd ZdZdZdZdddddZd	d
 Zdd ZdddZ	dd Z
dS )EpsImageFilez.EPS File Parser for the Python Imaging LibraryZEPSzEncapsulated PostscriptLZLABRGBCMYK)r   r   r   rT   c          
      s$     j\}} j| d _d  _td}t|}d}d} fdd}x jd}|dkrp|dkrP nb|d	kr|dkrqPnN|dkr|d td
krd}	t	|	n|r|  d}d}|d ||< |d7 }qP|r\|d td
ks|d d dkr|  d}qPt
|d | d}
yt|
}W n4 tjk
rZ } zd}	t	|	|W d d }~X Y nX |r|dd\}}| j|< |dkrZyRdd | D }|d |d  |d |d  f _dd j |||ffg _W n tk
r   Y nX nht|
}|r>|d}|d d dkr2|dd   jd< n
d j|< n|
d d
krNnd}	t|	n|d d dkr|d| d d}dd |d d  D \}}}}|dkrd! _n8|dkry j|  _W n tk
r   P Y nX nP ||f _d S d}qPW |   js d" _d#}	t|	d S )$NrZ      r   Tc                 s0   d j krd} t| d j kr,d} t| d S )NzPS-Adobez'EPS header missing "%!PS-Adobe" commentBoundingBoxz*EPS header missing "%%BoundingBox" comment)infoSyntaxError)r@   )rF   r   r   check_required_header_comments   s    

z:EpsImageFile._open.<locals>.check_required_header_commentsr   rI   s   
%znot an EPS fileF   s   %%EndCommentszlatin-1r   r]   c             S   s   g | ]}t t|qS r   )r   float).0ir   r   r   
<listcomp>*  s    z&EpsImageFile._open.<locals>.<listcomp>r   eps)r   r      zPS-Adobe	    zbad EPS headerrC   s   %ImageData:   c             S   s   g | ]}t |qS r   )r   )rd   valuer   r   r   rf   P  s    rT   1)r   r   z!cannot determine EPS bounding box)_find_offsetr2   r$   mode_size	bytearray
memoryviewr(   ordr_   strsplitmatchreerrorgroupr^   r1   r0   	Exceptionfieldr   mode_map
ValueError)rF   r8   r6   Zbyte_arrZbytes_mvZ
bytes_readZreading_commentsr`   byter@   r>   mekvboxZimage_data_valuescolumnsrowsZ	bit_depthZmode_idr   )rF   r   _open   s    
"

"






zEpsImageFile._openc             C   sl   | d}|dkr.|dtj | }d}n6t|dkrX| d}t|}t|d}nd}t|||fS )NrT   s   %!PSr   l   P rh   znot an EPS file)r(   r$   r%   r&   r'   rU   r_   )rF   r2   r>   r8   r6   r@   r   r   r   rn   i  s    

zEpsImageFile._find_offsetr   Fc             C   sD   | j r8t| j | j| j||| _| jj| _| jj| _g | _ tj| S )N)	r0   rA   r1   r2   r.   ro   rp   r   r,   )rF   r3   r4   r   r   r   r,     s    

zEpsImageFile.loadc             O   s   d S )Nr   )rF   argskwargsr   r   r   	load_seek  s    zEpsImageFile.load_seekN)r   F)rO   rP   rQ   rR   formatformat_descriptionr|   r   rn   r,   r   r   r   r   r   rX      s    
	rX   c             C   s  |    | jdkrd}n,| jdkr(d}n| jdkr8d}nd}t||r|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rN|  t| |dd| j ddfg |d |d  t|dr|  dS )!z*EPS Writer for the Python Imaging Library.rY   )rh   r   s   imagerZ   )rh   r   s   false 3 colorimager[   )rh   rT   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      
flushrg   )r   r   Ns   
%%%%EndBinary
s   grestore end
)	r,   ro   r}   r+   r1   r    r   r   _save)r.   r2   filenamerg   operatorr@   r   r   r   r     sB    









&


r   z.psz.epszapplication/postscript)r   F)r   )"r%   r   rw   r   r   r   rj   r   r   _binaryr   rU   Z
_deprecater   compileru   r{   r
   r   r   shutilbinarywhichr   rA   rB   rW   rX   r   Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s:   



b%	 B
4