a :jg?@s.UddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z ddl mZedZedZdad ed <dad d d dZd'ddddd ddddZdd dddZGddde j Zd(ddddd d!d"d#Ze ejeee ejee ejd$d%ge ejd&dS))) annotationsN)IO)Image ImageFile)i32lez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$zstr | bool | None gs_binaryboolreturncCstdurtjdrNtdurHddl}dD]}||dur(|aqHq(datan4ztjddgtj ddaWnt ydaYn0tduS)Nwinr)Zgswin32cZgswin64cgsFr z --version)stdout) rsysplatform startswithgs_windows_binaryshutilwhich subprocess check_callDEVNULLOSError)rbinaryrrrt |d|d} | | n|ddd%krdd}qvsd&} t| |pd'dd(df_td)d*j||fg_dS)+NrYrTFr[r cs0djvrd}t|djvr,d}t|dS)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)rF)selfrrcheck_required_header_commentss   z:EpsImageFile._open..check_required_header_commentsr/r )rMr c szt|}Wn4tjyB}zd}t||WYd}~n d}~00|sLdS|dd\}}|j|<|dkr|dkr|dn6rrrzdd |DWntyYn0dS) Nnot an EPS fileFrr%r^z(atend)TcSsg|]}tt|qSr)rfloat).0irrr z.read_comment..)splitmatchreerrorr`groupr_ Exception)rMmerFkvZ bounding_boxZreading_trailer_commentsraZtrailer_reachedrr read_comments$    z(EpsImageFile._open..read_commentrrhs %rc s %%EndCommentszlatin-1r] zbad EPS header s %ImageData:css|]}t|VqdSN)r)revaluerrr Jsz%EpsImageFile._open..rR1s%%EOFs %%Trailerz!cannot determine EPS bounding boxr%r&epsrr) _find_offsetr"r:_mode bytearray memoryviewr>ordr`r/fieldrjrmr_rrimode_map ValueError_sizer_Tiler!r )rarGoffsetZimagedata_sizeZbyte_arrZbytes_mvZ bytes_readZreading_header_commentsrbrtbyterFrMrorqZimage_data_valuescolumnsrowsZ bit_depthZmode_idrrsr_opens     $            zEpsImageFile._openrr)r"r cCsl|d}|dkr.|dtj|}d}n6t|dkrX|d}t|}t|d}n d}t|||fS)NrRrSrrTrwrc)r>r:r;r<r=rUr`)rar"rMrGrrFrrrrus    zEpsImageFile._find_offsetrFrr zImage.core.PixelAccess | None)r#r$r cCsD|jr8t|j|j|j|||_|jj|_|jj|_g|_tj |Sr|) r rOr!r"rCmoderrrrB)rar#r$rrrrBs   zEpsImageFile.load)posr cCsdSr|r)rarrrr load_seekszEpsImageFile.load_seekN)rF) __name__ __module__ __qualname____doc__formatformat_descriptionrrrrBrrrrrrWs9 rWz Image.Imagez str | bytesr[)rCr"filenamerr c Cs||jdkrd}n,|jdkr(d}n|jdkr8d}n d}t||r|d|d |d |j|d |d |d |d|j|d||d|d|d|jd|d|d|j|d|j|d|jd|jd|jdf|d||ddt|drN|t||t dd|jddg|d|d t|dr|dS)!z*EPS Writer for the Python Imaging Library.rX)rwrsimagerY)rwr&sfalse 3 colorimagerZ)rwrRsfalse 4 colorimagezimage 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" sgsave s10 dict begin s/buf %d string def rrs %d %d scale s%d %d 8 s[%d 0 0 -%d 0 %d] s+{ currentfile buf readhexstring pop } bind r% flushrrNs %%%%EndBinary s grestore end ) rBrrrAr!r6rr_saver)rCr"rroperatorrFrrrrsB          &  "   rz.psz.epszapplication/postscript)rF)r) __future__rr;r4rkrrr2typingrryrr_binaryrrUcompilerirr__annotations__rrrOrVrWrZ register_openrZ register_saveZregister_extensionsZ register_mimerrrrs2     h l4