1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
U
T±dÔ-ã@sìddlmZddlmZmZzddlmZdZWnek
rHdZYnXddddœZdddœZ    d    d
d
d œZ
d d „Z Gdd„dejƒZ dd„Z dd„Ze e je e ¡erèe e je¡ejrÌe e je ¡e e jd¡e e jd¡dS)é)ÚBytesIOé)ÚImageÚ    ImageFile)Ú_webpTF)ÚRGBXÚRGBAÚRGB)r    rr    r)sVP8 sVP8XsVP8LcCsL|dd…dk}|dd…dk}|dd…tk}|rH|rH|rHtsDdSdSdS)    NésRIFFéé sWEBPézEimage file could not be identified because WEBP support not installedT)Ú_VP8_MODES_BY_IDENTIFIERÚ    SUPPORTED)ÚprefixZis_riff_file_formatZ is_webp_fileZis_valid_vp8_mode©rúJd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\PIL/WebPImagePlugin.pyÚ_accepts ÿrcsreZdZdZdZdZdZdd„Zdd„Zdd    „Z    d
d „Z
dd d„Z dd„Z dd„Z ‡fdd„Z‡fdd„Z‡ZS)Ú WebPImageFileZWEBPz
WebP imagercCstjs|t |j ¡¡\}}}|_}}|r2||jd<|r@||jd<||f|_t|ƒ|_dd|j    d|jfg|_
d|_ d|_ dSt  |j ¡¡|_|j ¡\}}}}}}    ||f|_||jd<|d    ?d
@|d ?d
@|d ?d
@|d
@f\}
} } } | | | |
f|jd <||_ |j dk|_ |    dkrdn|    |_|    |_g|_
|j d¡}|j d¡}|j d¡}|r`||jd<|rp||jd<|r€||jd<|jdddS)NÚ icc_profileÚexifÚraw©rrrrFÚloopééÿr r Ú
backgroundrr    ZICCPZEXIFzXMP Úxmp)Úreset)rÚ HAVE_WEBPANIMZ
WebPDecodeÚfpÚreadÚmodeÚinfoÚ_sizerÚsizeÚtileÚn_framesZ is_animatedZWebPAnimDecoderÚ_decoderÚget_infoÚrawmodeZ    get_chunkÚ_reset)ÚselfÚdataÚwidthÚheightrrZ
loop_countZbgcolorZ frame_countr"Úbg_aÚbg_rÚbg_gÚbg_brrrrÚ_open+sNÿ
 
 
 
 
 
 
 
 
ü     
 
 
zWebPImageFile._opencCsd|jkrdS| ¡ ¡S)Nr)r#ZgetexifZ_get_merged_dict©r,rrrÚ_getexif_s
zWebPImageFile._getexifcCsd|jkr| |jd¡SiS)z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
 
        :returns: XMP tags in a dictionary.
        r)r#Z_getxmpr5rrrÚgetxmpdszWebPImageFile.getxmpcCs| |¡sdS||_dS©N)Z _seek_checkÚ_WebPImageFile__logical_frame©r,ÚframerrrÚseekms
zWebPImageFile.seekTcCs$|r|j ¡d|_d|_d|_dS)Nréÿÿÿÿ)r(rÚ_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r,rrrrr+ts
 
zWebPImageFile._resetcCsh|j ¡}|jd7_|dkr>| ¡| d¡d}t|ƒ‚|\}}||j}||_||8}|||fS)Nrrz(failed to decode next frame in WebP file)r(Zget_nextr>r+r<ÚEOFErrorr@)r,ÚretÚmsgr-Ú    timestampÚdurationrrrÚ    _get_next{s
 
 
zWebPImageFile._get_nextcCs8|j|krdS||jkr | ¡|j|kr4| ¡q dSr8)r>r+rFr:rrrÚ_seeks 
 
 
zWebPImageFile._seekcsŠtjr€|j|jkr€| |j¡| ¡\}}}||jd<||jd<|j|_|jr^|jr^|j     ¡t
|ƒ|_dd|j d|j fg|_ tƒ ¡S)NrDrErrr)rrr?r9rGrFr#r Z _exclusive_fpÚcloserr%r*r&ÚsuperÚload)r,r-rDrE©Ú    __class__rrrJ˜s  
 
 
 
zWebPImageFile.loadcstjstƒ ¡S|jSr8)rrrIÚtellr9r5rKrrrM«s
zWebPImageFile.tell)T)Ú__name__Ú
__module__Ú __qualname__ÚformatÚformat_descriptionr?r9r4r6r7r<r+rFrGrJrMÚ __classcell__rrrKrr%s4    
 rc( Csî|j ¡}t| dg¡ƒ}d}|g|D]}|t|ddƒ7}q(|dkrVt|||ƒdSd}d|krl|d}nbd|jkrÎ|jd}t|tƒrÎ|     ¡}|rÂ||d|dd…\}    }
} |    |
| df}n |||df}|j d    |j d    d¡¡} |j d
d¡} |j d d ¡}|j d d¡}|j dd¡}|j dd ¡}d }|j dd ¡}|j dd¡}|j dd¡}|j d¡pjd}|j dd¡}t|t
j ƒr|  ¡}|j dd¡}|r¨d }|dkrÀ|r¼dnd}|dkrØ|rÔdnd}t|tt fƒr
t|ƒdks
tdd„|Dƒƒsd|›}t|ƒ‚|\}}}}|d>|d >B|d!>B|d>B}t |jd|jd|| |||||¡    }d}d} | ¡}!z|g|D]}t|ddƒ}"t|"ƒD]ä}#| |#¡| ¡|}$|j}%|jtkrd"|jkpd#|jkp|jd$kod"|j ¡k}&|&rd%nd&}%| |%¡}$|%d&kr*d'}%| |$  d(|%¡t| ƒ|$jd|$jd|%|||¡t| tt fƒrx| | |7} n| | 7} |d7}q¦qŒW5| |!¡X| dt| ƒddd||d¡| |||¡}'|'dkràd)}t|ƒ‚|  |'¡dS)*NÚ append_imagesrr'r)rrrrrérrErÚ minimize_sizeFÚkminÚkmaxÚ allow_mixedÚlosslessÚqualityéPÚmethodrÚrré    éér
css&|]}d|kodknVqdS)réNr)Ú.0ÚvrrrÚ    <genexpr>êsz_save_all.<locals>.<genexpr>z:Background color is not an RGBA tuple clamped to (0-255): rr r ÚAÚaÚPrr    rrú1cannot write file as WebP (encoder returned None))!Ú encoderinfoÚcopyÚlistÚgetÚgetattrÚ_saver#Ú
isinstanceÚintZ
getpaletterÚExifÚtobytesÚtupleÚlenÚallÚOSErrorrZWebPAnimEncoderr%rMr<ÚrangerJr"Ú_VALID_WEBP_MODESÚimZgetpalettemodeÚconvertÚaddÚroundZassembleÚwrite)(rzr ÚfilenamerjrTÚtotalZimsrZpaletteÚrÚgÚbrErrVrWrXrYÚverboserZr[r]rrrrCr1r2r3r0ÚencZ    frame_idxrDZcur_idxZnfrÚidxr;r*Úalphar-rrrÚ    _save_all²sÎ
 
 
 
 
 
 
 ÿ
þý
  ÷   
  ÿý
 
 
ø  
rˆc Cs0|j dd¡}|j dd¡}|j d¡p*d}|j dd¡}t|tjƒrN| ¡}| d    ¡rd|d
d…}|j d d¡}|j d d ¡}|j d¡rdnd}    |jtkrØd|jkpÄd|jkpÄ|jdkoÄd|j    k}
|
rÒdnd¡}t   | ¡|j d|j d|t|ƒ|j|||    ||¡ } | dkr"d} t| ƒ‚| | ¡dS)NrZFr[r\rr^rósExiférr]r
ÚexactrrrfrgrhZ transparencyrr    ri)rjrmrprrrrsÚ
startswithr"Ú_VALID_WEBP_LEGACY_MODESr#r{rZ
WebPEncoder%Úfloatrwr~) rzr rrZr[rrrr]r‹r‡r-rCrrrro?sF 
 
 
ÿýõ
roz.webpz
image/webpN)Úiorr^rrrrÚ ImportErrorryrrrrrˆroZ register_openrQZ register_saverZregister_save_allZregister_extensionZ register_mimerrrrÚ<module>s2  
 
ý )