B .^LlA@sddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z ddl m Z m ZmZmZddlmZddZdd Zd d Zd d ZddZddefddefddefddefddefddefddefddefd d!d"efd#d$efd%d&efd'd(efd)d*efd+d,efd-d.efd/d0d1d2d3d4d5d6d7d8d9d:efdd;efdd?efd@dAefdBdCefdDdEefdFdGefdHdIefdJdKefdLdMefdNdOefdPdQefdRdSefdTdUefdVdWefdXdYefdZd[efd\d]efd^d_efd`daefdbdcefdddedfdgdhdidjdkdldmdndodpdqd drefds?ZdtduZGdvdwdwe j ZdxdyZdzd{Zd|d}Zd~d~dddddZdZ ddddZ!ddZ"ddZ#ddZ$ddZ%dddZ&e'ej(e&ee)ej(e$e*ej(ddddge+ej(ddS)N)Image ImageFileTiffImagePlugin)i8i16bei32beo8)presetscCs&t|jdd}t|j|dS)N)i16fpreadr _safe_read)selfmarkernr7/tmp/pip-install-mwhup7aw/Pillow/PIL/JpegImagePlugin.pySkip2src Cst|jdd}t|j|}d|d@}||j|<|j||f|dkr|dddkrt|d|jd<}t |d |jd <y$t |d }t|d t|d f}Wnt k rYn(X|dkr||jd<||jd<||jd<nn|dkr|dddkrd|jkrV||jd<n8|dkrH|dddkrH||jd<n|dkrt|dddkrt|j |n|dkr|dddkrd}|j di} x|||ddkry|d7}t||} |d7}t ||} |d| 7}||d@7}t||} |d7}|||| } | dkrnt| ddd t| dd t| d dd t| ddd!} | | | <|| 7}||d@7}Wntjk rPYnXqWn|d"kr|ddd#krt|d|jd$<yt |d}Wnt k rYn X||jd%<nF|dkrV|ddd&krV|dd|jd'<|j|d|jd(<d|jkrd|jkry|}|d)}|d*}yt|d+|d}Wntk r|}YnX|d,kr|d-9}t|d.t|d.f|jd<Wn(ttttfk rd/|jd<YnXdS)0Nr zAPP%disJFIFZjfifZ jfif_version rdpi jfif_unit jfif_densityisExifexifisFPXRZflashpix s ICC_PROFILEisPhotoshop 3.0 photoshops8BIMii)Z XResolutionZDisplayedUnitsXZ YResolutionZDisplayedUnitsYisAdobeadobeadobe_transformsMPFmpZmpoffseti(irgRQ@g?)Hr()r r rrrappapplistappendinfodivmodr Exceptionicclist setdefaulti32structerrortellgetexiffloat TypeErrorintKeyError SyntaxError ValueErrorZeroDivisionError)rrrsr)versionrroffsetr#codeZname_lensizedatar%r Zresolution_unitZ x_resolutionrrrrAPP7s                "rCcCsJt|jdd}t|j|}||jd<||jd<|jd|fdS)Nr commentCOM) r r rrrr,r)r*r+)rrrr=rrrrEs   rEc Cst|jdd}t|j|}t|ddt|ddf|_t|d|_|jdkrjtd|jt|d|_ |j dkrd|_ n2|j dkrd |_ n |j d krd |_ ntd |j |d krd|j d<|j d<|j rP|j t|j ddt|j kr?r ))rrrrrr)r rrrrr)r r rrrrcsJfddttDx*tD]\}fddtD|<q$WS)Ncsg|]}|kr|qSrr).0key)qtablesrr Msz(convert_dict_qtables..csg|] }|qSrr)rrZ)tablerrrOs)rWrU enumerate zigzag_index)ridxr)rrrconvert_dict_qtablesLsrcCsZt|dr|jdkrdS|jddd|jddd|jddd}t|dS)NrR)rrrrr'r )hasattrrRrX samplingsr)rZsamplingrrr get_samplingSs6rc Csyt|j}Wn"tk r0td|jYnX|j}dd|ddD}|dd}|dd}|d }|d krd}d }d }nx|tkrt|} d}| dd}| d }nLt|tst d n8|tkrt|dd}t|t r|tkrt|d }|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} |d} | rNd} d}|| }g}x*| r|| d|| |d} qWd}xV|D]N}tdd| t|}| d|dt|tt||7} |d7}qW|dd pf|d!d }|d"d }|d#d}t|tjr|}|||d$d||d%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}t||d*d|jd|fg|dS)+Nzcannot write mode %s as JPEGcSsg|] }t|qSr)round)rxrrrrjsz_save..r)rrqualityr subsamplingrZkeepr`zInvalid quality settingz4:4:4rz4:2:2rz4:2:0r z4:1:1riz3Cannot use 'keep' when original image is not a JPEGc s,|dkr |St|trhydd|DWntk rHtdYn XfddtdtdD}t|tttfr(t|trt |}nt|trt|}dt|krdksntdx`t |D]T\}}y t|dkrt t d |}Wnt k rtdYqXt|||<qW|SdS) NcSs.g|]&}|dddD] }t|qqS)#rr)splitr8)rlinenumrrrrsz3_save..validate_qtables..zInvalid quantization tablecsg|]}||dqS)@r)rr=)linesrrrsrrrz$None or too many quantization tablesr^) isinstancestr splitlinesr;rWrUtuplelistrrrr7r_)rrrr)rrvalidate_qtabless2     z_save..validate_qtablesrLrMr"iz>Hss ICC_PROFILErIFrJoptimizer ZsmoothZ streamtyperHr_rrk)RAWMODErSr9rZ encoderinforr rr8r;rrrgetattrr+r2packrUr rrtobytesZ encoderconfigrAmaxrZMAXBLOCK_save)rr rrrr,rrrrpresetrextrarMZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERmarkersrZrrArIrr bufsizerrrras                  &       rcCsB|}tdd||gyt|Wntk r<YnXdS)NZcjpegz-outfile)_dumprrrrr)rr rr}rrr _save_cjpegs rc Cstt||}y0|}|ddkr8ddlm}|||}Wn4ttfk rRYntk rnt dYnX|S)Nir) MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file) rhrZMpoImagePluginrZadoptr7 IndexErrorr:warningswarn)r rrZmpheaderrrrr jpeg_factory s    r z.jfifz.jpez.jpgz.jpegz image/jpeg)NN),r_rrr2rr}rrlrrr_binaryrrr rr1r Z JpegPresetsr rrCrEr\rbrmrgrhrrrrrrrrrrr Z register_openrZ register_saveZregister_extensionsZ register_mimerrrr"s v 0 J