zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
U
T±dG¼ã@sBddlZddlZddlZddlZddlZddlZddlmZddlm    Z    m
Z
m Z m Z m Z ddlmZddlmZddlmZddlmZdd    lmZdd
lmZe e¡Ze d ¡jZd Z d dddddddddddddddœZ!e d¡Z"e j#Z$de$Z%Gdd „d eƒZ&Gd!d"„d"eƒZ'd#d$„Z(d%d&„Z)dUd'd(„Z*Gd)d*„d*ƒZ+Gd+d,„d,e,ƒZ-Gd-d.„d.ƒZ.Gd/d0„d0e+ƒZ/d1d2„Z0Gd3d4„d4e j ƒZ1d5d6d7d8d9d:d;d;d<d=d>d?d@dAdBœZ2dCdD„Z3GdEdF„dFƒZ4GdGdH„dHƒZ5dIdJ„Z6dKdL„Z7e3dMfdNdO„Z8dPdQ„Z9e     :e1j;e1e0¡e     <e1j;e8¡e     =e1j;e7¡e     >e1j;dRdSg¡e     ?e1j;dT¡dS)VéN)ÚIntEnumé)ÚImageÚ
ImageChopsÚ    ImageFileÚ ImagePaletteÚ ImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32be)Ú    deprecates\w\w\w\ws‰PNG
 
)Ú1r)ÚLúL;2)rúL;4)rr)ÚIúI;16B)ÚRGBr)rzRGB;16B)ÚPúP;1)rúP;2)rúP;4)rr)ÚLAr)ÚRGBAzLA;16B)rr)rzRGBA;16B))rr)ér)ér)ér)ér)rr)rr)ré)rr )rr )rr )rr)rr)ré)rr!s^ÿ*ÿ*$é@c@seZdZdZdZdZdS)ÚDisposalrrrN)Ú__name__Ú
__module__Ú __qualname__ÚOP_NONEÚ OP_BACKGROUNDÚ OP_PREVIOUS©r*r*úId:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\PIL/PngImagePlugin.pyr#csr#c@seZdZdZdZdS)ÚBlendrrN)r$r%r&Ú    OP_SOURCEÚOP_OVERr*r*r*r+r,xsr,cCsˆtdtdi ¡D]X\}}| |¡r|t|ƒd…}||jkrt|›|›d|j›d|›ƒ||Sqdt›d|›d}t|ƒ‚dS)NZ APNG_DISPOSE_Z APNG_BLEND_é
Ú.zmodule 'z' has no attribute 'ú')    r#r,ÚitemsÚ
startswithÚlenÚ __members__rr$ÚAttributeError)ÚnameÚenumÚprefixÚmsgr*r*r+Ú __getattr__†s
 
 r;cCs*t ¡}| |t¡}|jr&d}t|ƒ‚|S)NzDecompressed Data Too Large)ÚzlibÚ decompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)ÚsZdobjÚ    plaintextr:r*r*r+Ú_safe_zlib_decompress‘s  rDcCst ||¡d@S)Nlÿÿ)r<Úcrc32)ÚdataÚseedr*r*r+Ú_crc32šsrHc@s^eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
dd„Z ddd„Z dS)Ú ChunkStreamcCs||_g|_dS©N)ÚfpÚqueue©ÚselfrKr*r*r+Ú__init__£szChunkStream.__init__cCs‚d}|jr(|j ¡\}}}|j |¡n*|j d¡}|dd…}|j ¡}t|ƒ}t|ƒsxtj    sxdt
|ƒ›d}t |ƒ‚|||fS)z.Fetch a new chunk. Returns header information.Nrrzbroken PNG file (chunk ú)) rLÚpoprKÚseekÚreadÚtellÚi32Úis_cidrÚLOAD_TRUNCATED_IMAGESÚreprÚ SyntaxError)rNÚcidÚposÚlengthrBr:r*r*r+rS§s  
zChunkStream.readcCs|SrJr*©rNr*r*r+Ú    __enter__»szChunkStream.__enter__cGs | ¡dSrJ)Úclose)rNÚargsr*r*r+Ú__exit__¾szChunkStream.__exit__cCsd|_|_dSrJ)rLrKr]r*r*r+r_ÁszChunkStream.closecCs|j |||f¡dSrJ)rLÚappend©rNrZr[r\r*r*r+ÚpushÄszChunkStream.pushcCs*t d|||¡t|d| d¡ƒ||ƒS)z"Call the appropriate chunk handlerzSTREAM %r %s %sZchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecodercr*r*r+ÚcallÇszChunkStream.callc
Cs¬tjr&|dd?d@r&| ||¡dSzBt|t|ƒƒ}t|j d¡ƒ}||krfdt|ƒ›d}t|ƒ‚Wn>t    j
k
r¦}zdt|ƒ›d}t|ƒ|‚W5d}~XYnXdS)    zRead and verify checksumrérNrz(broken PNG file (bad header checksum in rPz(broken PNG file (incomplete checksum in ) rrWÚcrc_skiprHrUrKrSrXrYÚstructÚerror)rNrZrFZcrc1Zcrc2r:Úer*r*r+ÚcrcÍs  zChunkStream.crccCs|j d¡dS)z Read checksumrN)rKrS)rNrZrFr*r*r+rlászChunkStream.crc_skipóIENDc
Cszg}z| ¡\}}}Wn2tjk
rH}zd}t|ƒ|‚W5d}~XYnX||krTqv| |t |j|¡¡| |¡q|S)Nztruncated PNG file)    rSrmrnÚOSErrorrprÚ
_safe_readrKrb)rNZendchunkZcidsrZr[r\ror:r*r*r+Úverifyæs zChunkStream.verifyN)rq) r$r%r&rOrSr^rar_rdrjrprlrtr*r*r*r+rI¢srIc@seZdZdZeddd„ƒZdS)ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information
 
    NcCst ||¡}||_||_|S)zÇ
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )ÚstrÚ__new__ÚlangÚtkey)ÚclsÚtextrxryrNr*r*r+rws     z iTXt.__new__)NN)r$r%r&Ú__doc__Ú staticmethodrwr*r*r*r+ruûsruc@s6eZdZdZdd„Zd dd„Zddd    „Zdd
d „Zd S)ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))
 
    cCs
g|_dSrJ)Úchunksr]r*r*r+rOszPngInfo.__init__FcCs*||g}|r| d¡|j t|ƒ¡dS)a"Appends an arbitrary chunk. Use with caution.
 
        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT
 
        TN)rbrÚtuple)rNrZrFÚ
after_idatÚchunkr*r*r+Úadds
 
z PngInfo.addÚcCs°t|tƒs| dd¡}t|tƒs,| dd¡}t|tƒsB| dd¡}t|tƒsX| dd¡}|rˆ| d|d|d|dt |¡¡n$| d|d|d|d|¡dS)    zùAppends an iTXt chunk.
 
        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag
 
        úlatin-1Ústrictúutf-8óiTXtsósN)Ú
isinstanceÚbytesÚencoderƒr<Úcompress)rNÚkeyÚvaluerxryÚzipr*r*r+Úadd_itxt)s
 
 
 
  þzPngInfo.add_itxtcCs°t|tƒr"|j|||j|j|dSt|tƒsbz| dd¡}Wn$tk
r`|j|||dYSXt|tƒsx| dd¡}|r˜| d|dt     
|¡¡n| d|d|¡dS)    zæAppends a text chunk.
 
        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag
 
        )rr…r†ózTXtóótEXtr‰N) rŠrur‘rxryr‹rŒÚ UnicodeErrorrƒr<r)rNrŽrrr*r*r+Úadd_textEs    
 
 
 zPngInfo.add_textN)F)r„r„F)F)r$r%r&r|rOrƒr‘r–r*r*r*r+r~s
 
 
r~cs¼eZdZ‡fdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Z‡ZS)+Ú    PngStreamcsRtƒ |¡i|_i|_d|_d|_d|_d|_d|_d|_    d|_
d|_ d|_ dS)N©rrr) ÚsuperrOÚim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚ im_n_framesÚ_seq_numÚ rewind_stateÚ text_memoryrM©Ú    __class__r*r+rOfs zPngStream.__init__cCs2|j|7_|jtkr.d|j›d}t|ƒ‚dS)Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r¤ÚMAX_TEXT_MEMORYrA)rNZchunklenr:r*r*r+Úcheck_text_memoryws
 
 ÿzPngStream.check_text_memorycCs|j ¡|j|jdœ|_dS)N)ÚinfoÚtileÚseq_num)ršÚcopyržr¢r£r]r*r*r+Ú save_rewind€sýzPngStream.save_rewindcCs(|jd|_|jd|_|jd|_dS)Nr©rªr«)r£ršržr¢r]r*r*r+Úrewind‡s  zPngStream.rewindcCsÂt |j|¡}| d¡}t d|d|…¡t d||¡||}|dkr`d|›d}t|ƒ‚zt||dd…ƒ}Wn:tk
rštj    r”d}n‚Ynt
j k
r²d}YnX||j d<|S)    Nr‰ziCCP profile name %rzCompression method %srúUnknown compression method z in iCCP chunkrÚ icc_profile) rrsrKÚfindrfrgrYrDrArWr<rnrš)rNr[r\rBÚiÚ comp_methodr:r°r*r*r+Ú
chunk_iCCPŒs$
 
 
zPngStream.chunk_iCCPcCs¢t |j|¡}|dkr,tjr |Sd}t|ƒ‚t|dƒt|dƒf|_z t|d|df\|_|_    Wnt
k
rvYnX|drŠd|j d    <|d
ržd }t |ƒ‚|S) Né zTruncated IHDR chunkrrré    é rÚ    interlaceé zunknown filter category) rrsrKrWrArUrœÚ_MODESrÚ
im_rawmodeÚ    ExceptionršrY©rNr[r\rBr:r*r*r+Ú
chunk_IHDR§s" 
zPngStream.chunk_IHDRcCs`d|jkr"d|jd||jfg}n*|jdk    r6d|jd<dd|j||jfg}||_||_t‚dS)NÚbboxrTÚ default_imager˜)ršr»r¡rœržZim_idatÚEOFError)rNr[r\rªr*r*r+Ú
chunk_IDAT»s
 
 
zPngStream.chunk_IDATcCst‚dSrJ)rÁ)rNr[r\r*r*r+Ú
chunk_IENDÇszPngStream.chunk_IENDcCs&t |j|¡}|jdkr"d|f|_|S)Nrr)rrsrKrrŸ©rNr[r\rBr*r*r+Ú
chunk_PLTEËs
 
zPngStream.chunk_PLTEcCs”t |j|¡}|jdkrLt |¡r@| d¡}|dkrJ||jd<q||jd<nD|jdkrft|ƒ|jd<n*|jdkrt|ƒt|dƒt|dƒf|jd<|S)    Nrr‰rÚ transparency©rrrrrr)    rrsrKrÚ_simple_paletteÚmatchr±ršÚi16)rNr[r\rBr²r*r*r+Ú
chunk_tRNSÒs
 
 
 
 
 zPngStream.chunk_tRNScCs$t |j|¡}t|ƒd|jd<|S)Nçjø@Úgamma)rrsrKrUršrÄr*r*r+Ú
chunk_gAMAæszPngStream.chunk_gAMAcCsBt |j|¡}t dt|ƒd|¡}tdd„|Dƒƒ|jd<|S)Nz>%dIrcss|]}|dVqdS)rÌNr*)Ú.0Úeltr*r*r+Ú    <genexpr>òsz'PngStream.chunk_cHRM.<locals>.<genexpr>Z chromaticity)rrsrKrmÚunpackr4r€rš)rNr[r\rBZraw_valsr*r*r+Ú
chunk_cHRMìszPngStream.chunk_cHRMcCs>t |j|¡}|dkr,tjr |Sd}t|ƒ‚|d|jd<|S)NrzTruncated sRGB chunkrZsrgb)rrsrKrWrAršr½r*r*r+Ú
chunk_sRGBõszPngStream.chunk_sRGBc    Csˆt |j|¡}|dkr,tjr |Sd}t|ƒ‚t|dƒt|dƒ}}|d}|dkrn|d|df}||jd<n|dkr„||f|jd    <|S)
Nr¶zTruncated pHYs chunkrrrrç¦
F%uš?ÚdpiZaspect)rrsrKrWrArUrš)    rNr[r\rBr:ÚpxÚpyÚunitrÖr*r*r+Ú
chunk_pHYss zPngStream.chunk_pHYscCsŽt |j|¡}z| dd¡\}}Wntk
r>|}d}YnX|rŠ| dd¡}| dd¡}|dkrh|n||j|<||j|<| t    |ƒ¡|S)Nr‰rór…r†ÚreplaceÚexif)
rrsrKÚsplitrAriršr›r¨r4)rNr[r\rBÚkÚvZv_strr*r*r+Ú
chunk_tEXts
 
zPngStream.chunk_tEXtcCst |j|¡}z| dd¡\}}Wntk
r>|}d}YnX|rN|d}nd}|dkrnd|›d}t|ƒ‚zt|dd…ƒ}Wn:tk
r¤tjržd}n‚Yntj    k
r¼d}YnX|rü| 
dd¡}| 
dd    ¡}||j |<|j |<|  t|ƒ¡|S)
Nr‰rrÛrr¯z in zTXt chunkr…r†rÜ)rrsrKrÞrArYrDrWr<rnriršr›r¨r4)rNr[r\rBrßràr³r:r*r*r+Ú
chunk_zTXt)s4
 
 
  zPngStream.chunk_zTXtc Cs„t |j|¡}}z| dd¡\}}Wntk
r>|YSXt|ƒdkrP|S|d|d|dd…}}}z| dd¡\}}    }
Wntk
rž|YSX|dkr|dkrz t|
ƒ}
Wn>tk
rätjrÞ|YS‚Yntj    k
rþ|YSXn|Sz4| 
dd¡}| 
dd¡}|     
dd¡}    |
 
dd¡}
Wnt k
rT|YSXt |
||    ƒ|j |<|j|<| t|
ƒ¡|S)Nr‰rrrr…r†r‡)rrsrKrÞrAr4rDrWr<rnrir•ruršr›r¨) rNr[r\ÚrrBrßÚcfÚcmrxZtkràr*r*r+Ú
chunk_iTXtKsB
  
 
 
 
zPngStream.chunk_iTXtcCs t |j|¡}d||jd<|S)NóExifrÝ)rrsrKršrÄr*r*r+Ú
chunk_eXIfsszPngStream.chunk_eXIfcCst |j|¡}|dkr,tjr |Sd}t|ƒ‚|jdk    rJd|_t d¡|St|ƒ}|dksb|dkrpt d¡|S||_t|dƒ|j    d<d|_
|S)    Nrz"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possiblerlrÚloopz
image/apng) rrsrKrWrAr¡ÚwarningsÚwarnrUršr )rNr[r\rBr:Ún_framesr*r*r+Ú
chunk_acTLys$
 
 
zPngStream.chunk_acTLcCsBt |j|¡}|dkr,tjr |Sd}t|ƒ‚t|ƒ}|jdkrF|dks^|jdk    rj|j|dkrjd}t|ƒ‚||_t|dƒt|dƒ}}t|dƒt|d    ƒ}}    |j\}
} |||
ks¾|    || krÊd
}t|ƒ‚||    |||    |f|j    d <t
|d ƒt
|d ƒ} } | dkrd} t | ƒt | ƒd|j    d<|d|j    d<|d|j    d<|S)Néz"APNG contains truncated fcTL chunkrrú#APNG contains frame sequence errorsrrr·rzAPNG contains invalid framesr¿ééédéèÚdurationéÚdisposaléÚblend) rrsrKrWrArUr¢rYrœršrÊÚfloat)rNr[r\rBr:ÚseqÚwidthÚheightr×rØZim_wZim_hZ    delay_numZ    delay_denr*r*r+Ú
chunk_fcTLs:ÿ ÿ
 
zPngStream.chunk_fcTLcCsv|dkr,tjr t |j|¡}|Sd}t|ƒ‚t |jd¡}t|ƒ}|j|dkr\d}t|ƒ‚||_| |d|d¡S)Nrz"APNG contains truncated fDAT chunkrrï)    rrWrsrKrArUr¢rYrÂ)rNr[r\rBr:rúr*r*r+Ú
chunk_fdATªszPngStream.chunk_fdAT)r$r%r&rOr¨r­r®r´r¾rÂrÃrÅrËrÎrÓrÔrÚrárârærèrírýrþÚ __classcell__r*r*r¥r+r—es*          "(r—cCs|dd…tkS)Nr)Ú_MAGIC)r9r*r*r+Ú_accept¾srcs‚eZdZdZdZdd„Zedd„ƒZdd„Zd    d
„Z    dd d „Z
dd„Z dd„Z dd„Z dd„Zdd„Z‡fdd„Zdd„Z‡ZS)Ú PngImageFileZPNGzPortable network graphicsc    CsÔt|j d¡ƒsd}t|ƒ‚|j|_d|_g|_t|jƒ|_|j ¡\}}}z|j     |||¡}Wnht
k
rxYqÚYnRt k
rÈt   d|||¡t |j|¡}|dd… ¡rÄ|j ||f¡YnX|j ||¡q<|jj|_|jj|_|jj|_d|_|jj|_|jj|_|jjpd|_|j  dd¡|_!|jj"rV|jj"\}}t# $||¡|_%|d    krl|d
|_&n||_&|jjdk    rÄd|_'|j (¡|j&|_)|j *¡|_+|j!rº|jd7_| ,d¡|jdk|_-dS) Nrznot a PNG filerú%r %s %s (unknown)rrrÀFófdATr).rrKrSrYÚ_fpÚ_PngImageFile__frameÚprivate_chunksr—ÚpngrjrÁr6rfrgrrsÚislowerrbrprÚmoderœÚ_sizeršr©Ú_textržrªr Zcustom_mimetyper¡rìÚgetrÀrŸrÚrawÚpaletteÚ_PngImageFile__prepare_idatZ!_close_exclusive_fp_after_loadingr­Ú_PngImageFile__rewind_idatrTÚ_PngImageFile__rewindÚ_seekÚ is_animated)rNr:rZr[r\rBÚrawmoderFr*r*r+Ú_openÊsR     
 
 
 
 
 
 
 
 
zPngImageFile._opencCsD|jdkr>|jr&|j}| |jd¡| ¡|jr>| |¡|jS)Nr)r rrrRrìÚload)rNÚframer*r*r+r{ s
 
zPngImageFile.textcCs^|jdkrd}t|ƒ‚|j |jddd¡|j ¡|j ¡|jrT|j ¡d|_dS)zVerify PNG fileNz)verify must be called directly after openrrr)rKÚ RuntimeErrorrRrªrrtr_Z _exclusive_fp)rNr:r*r*r+rts
 
 
 
zPngImageFile.verifyc Cs’| |¡sdS||jkr$| dd¡|j}t|jd|dƒD]N}z| |¡Wq>tk
rŠ}z| |¡d}t|ƒ|‚W5d}~XYq>Xq>dS)NrTrzno more images in APNG file)Z _seek_checkrrÚrangerÁrR)rNrZ
last_frameÚfror:r*r*r+rR-s
 
 
zPngImageFile.seekFc    Cs|dkrª|rZ|j |j¡|j ¡|j|_d|_|jr>d|_|jj    |_
|jj |_ |j|_ d|_d|_|j
 dd¡|_|j
 d¡|_|j
 d¡|_|j
 d¡|_d|_nä||jdkrÊd|›}t|ƒ‚| ¡|jrê|j |j|j¡|j ¡|_|j|_ |jrt |j |j¡d|_d}|j  d    ¡z|j ¡\}}}Wn"tjtfk
rbYqHYnX|d
krzd }t |ƒ‚|d krš|r–d }t|ƒ‚d}z|j !|||¡Wn”t"k
rÊYqHYnzt k
r|dkrþ|d    8}|rþ||_YqHt |j |¡Yn4t#k
rBt$ %d|||¡t |j |¡YnXq ||_|jj |_ |j
 d¡|_|j
 d¡|_|j
 d¡|_|j sŽt ‚|jdkr°|jt&j'kr°t&j(|_|jt&j'krÞ|j ¡|_| )|j|j¡|_n<|jt&j(krt*j+ ,|j-|j.¡|_| )|j|j¡|_nd|_dS)NrrÀFrörør¿rzcannot seek to frame rrqzNo more images in APNG fileófcTLzAPNG missing frame dataTrr)/rrRrrr®rrÚimÚpyaccessršr©ržrªrKÚ_prev_imÚdisposer rÀZ
dispose_opÚblend_opÚdispose_extentrrArÚpaster¬rrsrSrmrnrYrÁrjÚUnicodeDecodeErrorr6rfrgr#r)r(Ú_croprÚcoreÚfillr
Úsize)rNrr®r:Z frame_startrZr[r\r*r*r+r<s’
 
 
 
 
 
 
 
 
 
 zPngImageFile._seekcCs|jSrJ)rr]r*r*r+rT™szPngImageFile.tellcCs0|j d¡r|jd|_|j|_tj |¡dS)z"internal: prepare to read PNG filer¸)rN)r©r Z decoderconfigrÚ_PngImageFile__idatrÚ load_preparer]r*r*r+r*œs  zPngImageFile.load_preparecCs¼|jdkrˆ|j d¡|j ¡\}}}|dkrB|j |||¡dS|dkr€z|j |||¡Wntk
rrYnX|d|_q||_q|dkr˜|j}n t||jƒ}|j||_|j |¡S)zinternal: read more image datarr)óIDATsDDATrrÛr)r)rKrSrrdrjrÁÚmin)rNÚ
read_bytesrZr[r\r*r*r+Ú    load_read¥s$
    zPngImageFile.load_readc    Csö|jdkr|j |j¡|j d¡z|j ¡\}}}Wn tjtfk
rXYqHYnX|dkrhqHn(|dkr|jrd|_|j     |||¡qHz|j 
|||¡Wqt k
r¾YqHYqt k
rî|dkrÜ|d8}t  |j|¡Yqtk
rDt d|||¡t  |j|¡}|dd… ¡r@|j ||d    f¡YqXq|jj|_|jsl|j ¡d
|_n†|jrò|jtjkrò| |j|j¡}|jjd krÀd |j krÀ| !d |j d ¡}n
| "d ¡}|j #||j|¡|j|_|j$ròd
|_$d
S)z%internal: finished reading image datarrrqrrrrrTNrrÆr)%r)rKrSrrmrnrYrrrdrjr$rÁrrsr6rfrgr    rrbr›r r_rr!r,r.r%rr"r
r©Zconvert_transparentÚconvertr#r)rNrZr[r\rBÚupdatedÚmaskr*r*r+Úload_endÆsT
 
 
 
ÿ
zPngImageFile.load_endcCs6d|jkr| ¡d|jkr*d|jkr*dS| ¡ ¡S)NrÝzRaw profile type exif)r©rÚgetexifZ_get_merged_dictr]r*r*r+Ú_getexifùs
 
zPngImageFile._getexifcsd|jkr| ¡tƒ ¡S)NrÝ)r©rr™r3r]r¥r*r+r3s
zPngImageFile.getexifcCsd|jkr| |jd¡SiS)z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
 
        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r©Z_getxmpr]r*r*r+Úgetxmps    ÿýzPngImageFile.getxmp)F)r$r%r&ÚformatÚformat_descriptionrÚpropertyr{rtrRrrTr*r.r2r4r3r5rÿr*r*r¥r+rÆsC
 
]    !3 r)ró)úL;1r9)rs)rs)rs)rs)rs)rs)rs)rs)rs)rs)rs)rr:rrrrrzI;16rrrrrrcGsJd |¡}| tt|ƒƒ|¡| |¡t|t|ƒƒ}| t|ƒ¡dS)z'Write a PNG chunk (including CRC field)rÛN)ÚjoinÚwriteÚo32r4rH©rKrZrFrpr*r*r+Úputchunk*s
 
 
r?c@seZdZdd„Zdd„ZdS)Ú_idatcCs||_||_dSrJ)rKr‚)rNrKr‚r*r*r+rO8sz_idat.__init__cCs| |jd|¡dS)Nr+)r‚rK©rNrFr*r*r+r<<sz _idat.writeN©r$r%r&rOr<r*r*r*r+r@5sr@c@seZdZdd„Zdd„ZdS)Ú_fdatcCs||_||_||_dSrJ)rKr‚r«)rNrKr‚r«r*r*r+rOCsz_fdat.__init__cCs*| |jdt|jƒ|¡|jd7_dS)Nrr)r‚rKr=r«rAr*r*r+r<Hsz _fdat.writeNrBr*r*r*r+rC@srCcCs|j d|j dd¡¡}|j d|j dd¡¡}|j d|j dtj¡¡}|j d|j dtj¡¡}    |rtt |¡}
nt |g|¡}
g} d} |
D]} t     
| ¡D]ð}|j |kr¸|  ¡}n$|dkrÒ|j ||jd}n
|  |¡}|j  ¡}t|ttfƒr|| |d<t|ttfƒr|| |d<t|    ttfƒr:|    | |d<| d7} | rz| d    }|d
 d¡}|d
 d¡}|tjkrŒt| ƒd krŒtj}|tjkrè|d   ¡}tj d |jd¡}|d}|rÐ| |¡}n
d|j}| ||¡n"|tjkr| dd }n|d }t |  d¡|  d¡¡}| ¡}|s~|| d¡kr~|| d¡kr~t|ttfƒrž|d
d|d7<qžnd}|  |||dœ¡qžqŽ||dtt| ƒƒt|ƒƒ|rØt  !|t"||ƒdd|jd|fg¡d}t#| ƒD]2\}}|d }|ds d|j}n|d}| |¡}|j}|d
}t$t%| d|¡ƒƒ}| d|¡}| d|    ¡}||dt|ƒt|dƒt|dƒt|dƒt|dƒt&|ƒt&dƒt'|ƒt'|ƒƒ |d7}|dkræ|sæt  !|t"||ƒdd|jd|fg¡n0t(|||ƒ}t  !||dd|jd|fg¡|j)}qädS)Nrôrrérörør)rréÿÿÿÿÚ encoderinforrr)rrrrr¿r˜éþÿÿÿr)rr¿rEsacTLrrró)*rEr r©r#r'r,r-Ú    itertoolsÚchainrÚIteratorr
r¬r/rrŠÚlistr€r)r4r(rr&r'r(Zcropr#rZsubtract_moduloZgetbboxrbr=rÚ_saver@Ú    enumerateÚintÚroundÚo16r rCr«)rrKr‚rrÀÚ append_imagesrôrérörørHZ    im_framesZ frame_countÚim_seqÚim_framerEÚpreviousZ prev_disposalZ
prev_blendZbase_imr r¿Údeltar«rZ
frame_datar(Zframe_durationZframe_disposalZ frame_blendZ fdat_chunksr*r*r+Ú_write_multiple_framesMsÐ 
 
 
 
 
 
 ÿÿ þ ý
ü$
 
 
 
 
 
õ ý ýrUcCst|||dddS)NT)Úsave_all)rK)rrKÚfilenamer*r*r+Ú    _save_allÊsrXFc$
Cs|r’|j d|j d¡¡}tƒ}|j dg¡}|r>t |¡}nt |g|¡}|D] }    t |    ¡D]}
| |
j    ¡q^qPdD]} | |krvq˜qv| 
¡} n|j    } | dkr,d|jkrÂt d|jd>dƒ} n.|j rìt t t|j  ¡dƒddƒdƒ} nd} | d    kr,| d
kr
d} n| d krd
} nd } | ›d | ›} |j d d¡|j dd¡|j dd¡|j dd¡f|_zt| \}} Wn:tk
r¬}zd| ›d}t|ƒ|‚W5d}~XYnX| t¡||dt|jdƒt|jdƒ| dddƒdddddg}|j d|j d¡¡}|r8d}|d t |¡}||d!|ƒ| d¡|j d"¡}|rÞd#d$d%d&g}|jD]€}|dd
…\}}||kr’| |¡||||ƒnH||krª||||ƒn0|dd
… ¡r\|d
d…}|s\||||ƒq\|j    dkr,| d}|j d'¡d|…}t|ƒ|kr |d7}q||d(|ƒ|j d)|j d)d¡¡}|sT|dkr8|j    dkr¸| }t|t ƒr†||d*|d|…ƒn0t dt d+|ƒƒ}d,|d}||d*|d|…ƒn~|j    d-kræt dt d.|ƒƒ}||d*t!|ƒƒnP|j    d'kr|\}} }!||d*t!|ƒt!| ƒt!|!ƒƒnd)|jkrzd/}t|ƒ‚nB|j    dkrz|j "¡d0krz|j d0d1¡}| }||d*|d|…ƒ|j d2¡}"|"rÄ||d3tt#|"dd4d5ƒƒtt#|"dd4d5ƒƒd6ƒ|rd7d8g}|jD]6}|dd
…\}}||krØ| |¡||||ƒqØ|j d9¡}#|#r^t|#t$j%ƒr:|# &d:¡}#|# 'd;¡rR|#d<d…}#||d=|#ƒ|rxt(||||||ƒn$t) *|t+||ƒd>d?|jd|fg¡|rð|jD]F}|dd
…\}}|dd
… ¡r¨|d
d…}|r¨||||ƒq¨||d@dƒt,|dAƒr| -¡dS)BNrÀrP)rrrrÚbitsrér rrrú;ÚoptimizeFZcompress_levelrDÚ compress_typeÚ
dictionaryrÛzcannot write mode z as PNGsIHDRrr‰scHRMsgAMAssBITssRGBstIMEr°s ICC Profiler“siCCPZpnginfossPLTrˆr”r’rsPLTErÆstRNSéÿóÿrÇiÿÿz%cannot use transparency for this moderÚArÖspHYsrÕgà?ósbKGDshISTrÝrrçr!seXIfrr˜rqÚflush).rEr r©ÚsetrGrHrrIrƒr
rQr,rÚmaxr4ZgetdataZ encoderconfigÚ    _OUTMODESÚKeyErrorrrr<rr=r(r<rÚremoverr    rZ
getpaletterŠr‹rOZgetpalettemoderMrZExifÚtobytesr3rUrrKr@Úhasattrrc)$rrKrWr‚rVrÀÚmodesrPrHrQrRr
ÚcolorsrYrror:rZiccr7rFr©Zchunks_multiple_allowedZ
info_chunkrZrZpalette_byte_numberZ palette_bytesrÆZ alpha_bytesÚalphaÚredÚgreenÚbluerÖrÝr*r*r+rKÎs
ÿ 
 
 
$
 
 
    ü 
  ø  
 
 
 
 
 
" 
 û
 
 
 
   $
   rKcKsBGdd„dƒ}dd„}|ƒ}z||_t||d|ƒW5|`X|jS)z4Return a list of PNG chunks representing this image.c@s eZdZgZdd„Zdd„ZdS)zgetchunks.<locals>.collectorcSsdSrJr*rAr*r*r+r<šsz"getchunks.<locals>.collector.writecSs|j |¡dSrJ)rFrb)rNr‚r*r*r+rbsz#getchunks.<locals>.collector.appendN)r$r%r&rFr<rbr*r*r*r+Ú    collector—srqcWs0d |¡}tt|t|ƒƒƒ}| |||f¡dS)NrÛ)r;r=rHrbr>r*r*r+rb s
zgetchunks.<locals>.appendN)rErKrF)rÚparamsrqrbrKr*r*r+Ú    getchunks”s    rsz.pngz.apngz    image/png)r)@rGÚloggingÚrermrêr<r8rr„rrrrrÚ_binaryr    rÊr
rUr r rOr r=Z
_deprecaterÚ    getLoggerr$rfÚcompilerÉrVrrºrÈZ    SAFEBLOCKr?r§r#r,r;rDrHrIrvrur~r—rrrfr?r@rCrUrXrKrsZ register_openr6Z register_saveZregister_save_allZregister_extensionsZ register_mimer*r*r*r+Ú<module>"sœ       
 ë
     
YT[Uñ   }G