a :jgd'@sddlmZddlmZddlmZmZddlmZm Z zddlm Z dZ Wne ybdZ Yn0d d d d Z d d dddZGddde j ZdddddZdddddddZdddddddZeejeee reejeeejeeejdeejd d!S)") annotations)BytesIO)IOAny)Image ImageFile)_webpTFRGBRGBA)sVP8 sVP8XsVP8Lbytesz bool | str)prefixreturncCsL|dddk}|dddk}|ddtv}|rH|rH|rHtsDdSdSd S) NsRIFF sWEBPzEimage file could not be identified because WEBP support not installedTF)_VP8_MODES_BY_IDENTIFIER SUPPORTED)r Zis_riff_file_formatZ is_webp_fileZis_valid_vp8_moder=/usr/local/lib/python3.9/site-packages/PIL/WebPImagePlugin.py_accepts rcseZdZdZdZdZdZddddZddd d Zd dd d dZ d!dddddZ ddddZ d dd ddZ ddfdd Z d ddddZd ddd ZZS)" WebPImageFileZWEBPz WebP imagerNone)rcCs t|j|_|j\}}}}}}||f|_||jd<|d?d@|d?d@|d?d@|d@f\}}} } || | |f|jd<||_|jdk|_ |dkrd n||_ ||_ g|_ |j d } |j d } |j d } | r| |jd <| r| |jd<| r| |jd<|jdddS)Nlooprr backgroundrRGBXr ZICCPZEXIFzXMP icc_profileexifxmpF)reset)r ZWebPAnimDecoderfpread_decoderget_info_sizeinfon_framesZ is_animated_moderawmodetileZ get_chunk_reset)selfwidthheightZ loop_countbgcolorZ frame_countmodebg_abg_rbg_gbg_brr r!rrr_open+s2             zWebPImageFile._openzdict[int, Any] | NonecCsd|jvrdS|S)Nr )r(ZgetexifZ_get_merged_dictr.rrr_getexifOs zWebPImageFile._getexifint)framercCs||sdS||_dSN)Z _seek_check_WebPImageFile__logical_framer.r;rrrseekTs zWebPImageFile.seekTbool)r"rcCs$|r|jd|_d|_d|_dS)Nr)r%r"_WebPImageFile__physical_frame_WebPImageFile__loaded_WebPImageFile__timestamp)r.r"rrrr-[s  zWebPImageFile._resetztuple[bytes, int, int]cCsh|j}|jd7_|dur>||dd}t||\}}||j}||_||8}|||fS)Nrrz(failed to decode next frame in WebP file)r%Zget_nextrBr-r?EOFErrorrD)r.retmsgdata timestampdurationrrr _get_nextbs   zWebPImageFile._get_nextcCs8|j|krdS||jkr ||j|kr4|q dSr<)rBr-rKr>rrr_seekws    zWebPImageFile._seekzImage.core.PixelAccess | Nonecs|j|jkr~||j|\}}}||jd<||jd<|j|_|jrX|jrX|jt||_t dd|j d|j g|_ tS)NrIrJraw)rrr)rCr=rLrKr(r#Z _exclusive_fpcloserrZ_Tilesizer+r,superload)r.rHrIrJ __class__rrrQs       zWebPImageFile.load)posrcCsdSr<r)r.rTrrr load_seekszWebPImageFile.load_seekcCs|jSr<)r=r8rrrtellszWebPImageFile.tell)T)__name__ __module__ __qualname__formatformat_descriptionrCr=r7r9r?r-rKrLrQrUrV __classcell__rrrRrr%s$rz Image.Image)imrcCs"|jdvr||jrdnd}|S)N)rr r r r )r2convertZhas_transparency_data)r]rrr_convert_frames r_z IO[bytes]z str | bytesr)r]r#filenamerc' Cs||j}t|dg}d}|g|D]}|t|dd7}q(|dkrVt|||dSd}d|vrl|d}nbd|jvr|jd}t|tr| }|r||d|dd\} } } | | | df}n |||df}|jd |jd d} |jd d} |jd d }|jd d}|jdd}|jdd }d }|jdd }|jdd}|jdd}|jdd}|jdpxd}|jdd}t|t j r| }|jdd}|rd }|dur|rdnd}|dur|rdnd}t|tt frt|dkstdd|Ds*d |}t||\}}}}|d!>|d">B|d#>B|d>B}t|jd|jd|| ||||| }d} d}!|}"z|g|D]~}t|dd}#t|#D]b}$||$t|}%||%t|!||||t| tt fr|!| | 7}!n|!| 7}!| d7} qqW||"n ||"0|dt|!|||d||||}&|&durnd$}t|||&dS)%N append_imagesrr)r)rrrrrrrJr minimize_sizeFkminkmax allow_mixedlosslessqualityP alpha_qualitydmethodrr r! rcss&|]}d|kodknVqdS)rNr).0vrrr z_save_all..z:Background color is not an RGBA tuple clamped to (0-255): rrr1cannot write file as WebP (encoder returned None)) encoderinfocopylistgetgetattr_saver( isinstancer:Z getpaletterExiftobytestuplelenallOSErrorr ZWebPAnimEncoderrOrVranger?r_addgetimroundassemblewrite)'r]r#r`rwratotalZimsrpalettergbrJrrcrdrerfverbosergrhrjrlrr r!rGr4r5r6r3encZ frame_idxrIZcur_idxZnfridxr;rHrrr _save_alls                    rc Cs|jdd}|jdd}|jdd}|jdp8d}|jd d }t|tjr\|}|d rr|d d}|jd d}|jdd} |jdrdnd} t|}t | |t |t ||| | || } | durd} t | | | dS)NrgFrhrirjrkrrmr rusExifr!rlrexactrrrv)rwrzr}rr~r startswithr_r Z WebPEncoderfloatrr) r]r#r`rgrhrjrr r!rlrrHrGrrrr|s8    r|z.webpz image/webpN) __future__riortypingrrrmrrr r ImportErrorrrrr_rr|Z register_openrZZ register_saveZregister_save_allZregister_extensionZ register_mimerrrrs.     s}"