3 }\mA@sddlmZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z m ZmZddlmZddlmZdZd d Zd d Zd dZddZddZddefddefddefddefddefddefdd efd!d"efdd%d&efd'd(efd)d*efd+d,efd-d.efd/d0efd1d2efdddddddddddGdHefddIefdJdKefdLdMefdNdOefdPdQefdRdSefdTdUefdVdWefdXdYefdZd[efd\d]efd^d_efd`daefdbdcefdddeefdfdgefdhdiefdjdkefdldmefdndoefdpdqefddddddddddddddddefd?ZddZGdddejZddZddZddZ dddddddZ!dZ"ddddddiZ#ddބZ$ddZ%ddZ&ddZ'd ddZ(ej)ej*e(eej+ej*e&ej,ej*ddddgej-ej*ddS( )print_functionN)Image ImageFileTiffImagePlugin)i8o8i16bei32be)presets) isStringTypez0.6cCs&t|jjdd}tj|j|dS)N)i16fpreadr _safe_read)selfmarkernrk/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-i584jbuk/Pillow/PIL/JpegImagePlugin.pySkip6srcCst|jjdd}tj|j|}d|d@}||j|<|jj||f|dkr|dddkrt|d|jd<}t |d |jd <y$t |d }t|d t|d f}Wnt k rYn(X|dkr||jd<||jd<||jd<nb|dko|dddkrd|jkrJ||jd<n.|dkrF|dddkrF||jd<n|dkrr|dddkrr|j j|n|dkr|dddkr|dd}d} i} x|| | ddkr| d7} t|| } | d7} t || } d| | } | d@r| d7} t || } | d7} || | | }| dkrpt |ddd t|dd t |d dd t|ddd!}|| | <| | } | d@r| d7} qW| |jd"<n|d#kr|ddd$krt|d|jd%<yt |d}Wnt k rYn X||jd&<nF|dkrJ|ddd'krJ|dd|jd(<|jj|d|jd)<d|jkr d|jkr y|j}|d*}|d+}yt|d|d}Wntk r|}YnX|d,kr|d-9}t|d.t|d.f|jd<Wn&tttfk rd0|jd<YnXdS)1Nr zAPP%disJFIFZjfifZ jfif_version rdpi jfif_unit jfif_densityisExifexifisFPXRZflashpix s ICC_PROFILEisPhotoshop 3.0rs8BIMii)Z XResolutionZDisplayedUnitsXZ YResolutionZDisplayedUnitsY photoshopisAdobeadobeadobe_transformsMPFmpZmpoffseti(igRQ@g?H)r*r*)rrrrrappapplistappendinfodivmodr Exceptionicclisti32tell_getexiffloat TypeErrorintKeyError SyntaxErrorZeroDivisionError)rrrsr+versionr r!blocksoffsetr%codeZname_lensizedatar'r"Zresolution_unitZ x_resolutionrrrrAPP;s                    "rBcCs@t|jjdd}tj|j|}||jd<|jjd|fdS)Nr COM)rrrrrr+r,r-)rrrr;rrrrCs rCc Cst|jjdd}tj|j|}t|ddt|ddf|_t|d|_|jdkrjtd|jt|d|_ |j dkrd|_ n2|j dkrd |_ n |j d krd |_ ntd |j |dkrd|j d<|j d<|j rP|j j t|j ddt|j kr?csJfddttDx*tD]\}fddtD|<q$WS)Ncsg|]}|kr|qSrr).0key)qtablesrr Usz(convert_dict_qtables..csg|] }|qSrr)rr\)tablerrrWs)rYrW enumerate zigzag_index)ridxr)rrrconvert_dict_qtablesTsrcCs\t|d s|jdkrdS|jddd|jddd|jddd}tj|d S) NrTrrrr)r )rrr)hasattrrTrZ samplingsr)rZsamplingrrr get_sampling[s6rcCsyt|j}Wn"tk r0td|jYnX|j}dd|jdd)D}|jdd}|jdd*}|jd }|d krd}d }d }nx|tkrt|} d}| jdd+}| jd }nLt|tst d n8|tkrt|jdd,}t |o|tkrt|jd }|d krd}nV|dkrd}nF|dkr.d}n6|dkr>d}n&|d krd|j dkr\t dt |}dd} |d kr|j dkrt dt |d d}| |}d} |jd} | rNd} d}|| }g}x*| r|j| d|| |d} qWd}xV|D]N}tjdd| t|}| d|dt|tt||7} |d7}qW|jddpf|jdd}|jd d}|jd!d}t|tjr|j}|||jd"d||jd#d|d|d||| |f |_d}|s|rB|jd$krd%|jd|jd}nB|d&ks|dkr.d|jd|jd}n|jd|jd}ttj|t|d't| d}tj||d(d-|jd|fg|dS).Nzcannot write mode %s as JPEGcSsg|]}tt|qSr)r7round)rxrrrrrsz_save..rrquality subsamplingrrZkeeprbzInvalid quality settingz4:4:4z4:2:2z4:2:0r z4:1:1rz3Cannot use 'keep' when original image is not a JPEGcs,|dkr |St|rfydd|jDWntk rFtdYn XfddtdtdD}t|tttfr(t|trt |}nt|trt|}dt|kodknstdx`t |D]T\}}y t|dkrt t j d |}Wnt k rtdYqXt|||<qW|SdS) NcSs.g|]&}|jdddjD] }t|qqS)#rr)splitr7)rlinenumrrrrsz3_save..validate_qtables..zInvalid quantization tablecsg|]}||dqS)@r)rr;)linesrrrsrr'rz$None or too many quantization tablesr`) r splitlinesrrYrW isinstancetuplelistrrrr6ra)rrrr)r(rvalidate_qtabless0    z_save..validate_qtablesrNrOr$iz>Hss ICC_PROFILErKFrLoptimizer"ZsmoothZ streamtyperFr_rr)rrrrr)rr)RAWMODErUr8IOErrorZ encoderinforr r*r7rr rrgetattrr-rpackrWrrrtobytesZ encoderconfigr@maxrZMAXBLOCK_save)rrrrr.rr!r"rpresetr-extrarOZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERmarkersr\rr@rKr.r"bufsizerrrr6is                  &        r6c CsRddl}ddl}|j}|jdd||gy|j|Wntk rLYnXdS)NrZcjpegz-outfile)rr_dumprrr)rrrrrrrrr _save_cjpegsr<c Cstt||}y0|j}|ddkr8ddlm}|j||}Wn4ttfk rRYntk rntj dYnX|S)Nir) MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file) rrZMpoImagePluginr=Zadoptr6 IndexErrorr9warningswarn)rrrZmpheaderr=rrr jpeg_factorys   rAz.jfifz.jpez.jpgz.jpegz image/jpeg)rerfN)rgrhN)rirjN)rkrlN)rmrnN)rorpN)rqrrN)rsrtN)rurvN)rwrxN)ryrzN)r{r|N)r}r~N)rrN)rrN)rrN)rrN)rrN)rrN)rrN)rrN)rrN)rrN)rrN)rrN)@rrrrPr$rrrr rrrMrQrrrr)rr#rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r r rrrr)rrrrrr)r rrrrr)r r rrrr)NN). __future__rrarrr?rrrr_binaryrrr rr r2Z JpegPresetsr Z_utilr __version__rrBrCr^rdrrrrr4rr0rrrrr6r<rAZ register_openrZ register_saveZregister_extensionsZ register_mimerrrr#s   v 0 N