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
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
Ë
³òúhˑãóN—UddlmZddlZddlZddlmZddlmZddlm    Z    m
Z
m Z dZ e r$ddlm Z dd    lmZdd
lmZmZdd lmZmZdd lmZmZe    j.j0Zd ed<    Gd„d«Zddd„Zddd„Z        d                                            dd„Z                                dd„Z                        dd„Z y)é)Ú annotationsN)ÚSequence)Úcasté)ÚImageÚ
ImageColorÚ    ImageTextF)ÚCallable)Ú
ModuleType)ÚAnyÚAnyStr)Ú
ImageDraw2Ú    ImageFont)ÚCoordsÚ_Inkz!Callable[[], Image.core._Outline]ÚOutlinecóº—eZdZUdZded<ddd„Z        dd„Z                dd„Z    d                    d d„Z        d!                                            d"d„Z        d                            d#d    „Z
            d$                                                    d%d
„Z             d$                                    d&d „Z             d$                                            d'd „Z             d(                                    d)d „Z        d*                            d+d„Z            d$                                                    d%d„Zdd,d„Z            d$                                    d&d„Z                d-                                                    d.d„Z            d$                                    d&d„Z                d-ddœ                                                    d/d„Z                                            d0                                                                                                                            d1d„Z                                            d0ddœ                                                                                                                    d2d„Z                    d3ddœ                                                            d4d„Z                                    d5ddœ                                                                                                    d6d„Z                                    d5ddœ                                                                                                    d6d„Zy)7Ú    ImageDrawNúNImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | NoneÚfontcóN—|j«d}|€ |j}||jk7r$|dk(r|jdk(rd}n d}t|«‚|dk(r|j|_nd|_||_|j
|_t jj|j
|«|_||_|dvr!|jjd«|_
n |jjd    «|_
|d
vrd |_ d |_ yd |_ d |_ y)a˜
        Create a drawing instance.
 
        :param im: The image to draw in.
        :param mode: Optional mode to use for color values.  For RGB
           images, this argument can be RGB or RGBA (to blend the
           drawing into the image).  For all other modes, this argument
           must be the same as the image mode.  If omitted, the mode
           defaults to the mode of the image.
        rNÚRGBAÚRGBrz mode mismatchÚP)ÚIÚFéÿÿÿÿ)Ú1rrrrÚLF) Ú_ensure_mutableÚmodeÚ
ValueErrorÚpaletteÚ_imageÚimrÚcoreÚdrawÚdraw_inkÚinkÚfontmodeÚfill)Úselfr%r!ÚblendÚmsgs     ú@H:\Change_password\venv_build\Lib\site-packages\PIL/ImageDraw.pyÚ__init__zImageDraw.__init__Bsý€ð     ×ÑÔØˆØ ˆ<Ø—7‘7ˆDØ 2—7‘7Š?ؐvŠ~ "§'¡'¨UÒ"2Ø‘à%Ü  “oÐ%Ø 3Š;ØŸ:™:ˆDLàˆDŒL؈Œ Ø—%‘%ˆŒÜ—J‘J—O‘O D§G¡G¨UÓ3ˆŒ    ØˆŒ    Ø :Ñ Ø—y‘y×)Ñ)¨!Ó,ˆDHà—y‘y×)Ñ)¨"Ó-ˆDŒHØ Ð'Ñ 'àˆDŒMðˆ    ð ˆDŒM؈    ócój—|jsddlm}|j«|_|jS)a=
        Get the current default font.
 
        To set the default font for this ImageDraw instance::
 
            from PIL import ImageDraw, ImageFont
            draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
 
        To set the default font for all future ImageDraw instances::
 
            from PIL import ImageDraw, ImageFont
            ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
 
        If the current default font is ``None``,
        it is initialized with ``ImageFont.load_default()``.
 
        :returns: An image font.r©r)rÚrÚ load_default)r,rs  r/ÚgetfontzImageDraw.getfontjs*€ð(yŠyå #à.˜    ×.Ñ.Ó0ˆDŒI؏y‰yÐr1cóV—|ddlm}|j|«S|j«S)Nrr3)r4rr5r6)r,Ú    font_sizers   r/Ú_getfontzImageDraw._getfont…s,€ð Ð  Ý #à)9×)Ñ)¨)Ó4Ð 4à—<‘<“>Ð !r1có®—d}d}|€.|€,|jr|j}||fS|j}||fS|t|t«r t    j
||j «}|jr6t|t«r&|jj ||j«}|jj|«}|t|t«r t    j
||j «}|jr6t|t«r&|jj ||j«}|jj|«}||fS©N) r+r)Ú
isinstanceÚstrrÚgetcolorr!r#Útupler$r'r()r,r)r+Ú
result_inkÚ result_fills     r/Ú_getinkzImageDraw._getinks €ðˆ
؈ Ø ˆ;˜4˜<؏yŠyØ"Ÿh™h ð ˜;Ð&Ð&ð"ŸX™X
ð˜;Ð&Ð&ðˆÜ˜c¤3Ô'Ü$×-Ñ-¨c°4·9±9Ó=CØ—<’<¤J¨s´EÔ$:ØŸ,™,×/Ñ/°°T·[±[ÓACØ!ŸY™Y×/Ñ/°Ó4
ØÐܘd¤CÔ(Ü%×.Ñ.¨t°T·Y±YÓ?DØ—<’<¤J¨t´UÔ$;ØŸ<™<×0Ñ0°°t·{±{ÓCDØ"Ÿi™i×0Ñ0°Ó6 ؘ;Ð&Ð&r1cóp—|j|«\}}| |jj|||||«yy)z Draw an arc.N)rBr'Údraw_arc)r,ÚxyÚstartÚendr+Úwidthr)s       r/Úarcz ImageDraw.arc¨s:€ð—L‘L Ó&‰    ˆˆTØ ˆ?Ø I‰I× Ñ ˜r 5¨#¨s°EÕ :ð r1có¨—|j«|j|«\}}|€|}|(|jj||j|«yy)zDraw a bitmap.N)ÚloadrBr'Ú draw_bitmapr%)r,rEÚbitmapr+r)s     r/rMzImageDraw.bitmapµsM€ð     ‰ Œ Ø—L‘L Ó&‰    ˆˆTØ ˆ;؈CØ ˆ?Ø I‰I× !Ñ ! " f§i¡i°Õ 5ð r1cóΗ|j||«\}}||jj||||d«|-||k7r'|dk7r!|jj||||d|«yyyy)z Draw a chord.Nrr)rBr'Ú
draw_chord©    r,rErFrGr+ÚoutlinerHr)Úfill_inks             r/ÚchordzImageDraw.chordÀsn€ðŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I×  Ñ    U¨C°¸1Ô =Ø ˆ?˜s hš°5¸A²:Ø I‰I×  Ñ    U¨C°°a¸Õ ?ð4>˜ˆ?r1cóƗ|j||«\}}||jj||d«|+||k7r%|dk7r|jj||d|«yyyy)zDraw an ellipse.Nrr)rBr'Ú draw_ellipse©r,rEr+rQrHr)rRs       r/ÚellipsezImageDraw.ellipseÐsf€ðŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I× "Ñ " 2 x°Ô 3Ø ˆ?˜s hš°5¸A²:Ø I‰I× "Ñ " 2 s¨A¨uÕ 5ð4>˜ˆ?r1cóh—|d|z
|d|z
|d|z|d|zf}|j||||«y)z4Draw a circle given center coordinates and a radius.rrN)rW)r,rEÚradiusr+rQrHÚ
ellipse_xys       r/ÚcirclezImageDraw.circleÞsD€ð˜‘e˜f‘n b¨¡e¨f¡n°b¸±e¸f±nÀbÈÁeÈfÁnÐUˆ
Ø  ‰ Z  w°Õ6r1c ó|j|«d}|R|jj||‰«|dk(r.‰dkDr't|dtt
f«rt ttt|«}nGtdt|«d«Dcgc](}t ttt |||dz««‘Œ*}}tdt|«dz
«D]‹}||}||dz
|f|||dzffD    
cgc]C\}    }
tjtj|
d|    dz
|    d|
dz
««dz‘ŒE} }    }
| d| dk(rŒw                        dˆfd„ } | d| dkDxr| dd    z
| dkDxs| d| dkxr| dd    z| dkD} |d‰dz z
dz|d‰dz z
dzf|d‰dz zdz
|d‰dz zdz
fg}| r| dd
z| dd
z}
}    n| dd
z
| dd
z
}
}    |j||    d
z
|
d
z
|«‰d kDsŒ7| r | || dd
z«|| || dd
z«g}n| || dd
z
«|| || dd
z
«g}|j||d ¬ «ŒŽyyyycc}wcc}
}    w)z6Draw a line, or a connected sequence of line segments.rNÚcurveééréhc óü•—|\}}|dz}‰dz dz
}td„||tjtj|««zf||tjtj|««zffD««S)NéZr_rc3ó†K—|]9\}}||dkDrtj|«ntj|«z–—Œ;y­w)rN)ÚmathÚfloorÚceil)Ú.0ÚpÚp_ds   r/ú    <genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>s9èø€ò%á &  3ð°C¸!²G¤§¡¨C¤ÄÇÁÈ3ÃÕPñ%ùs‚?A)r?rdÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancerHs     €r/Úcoord_at_anglez&ImageDraw.line.<locals>.coord_at_angle s€ø€ð %™˜˜1Ø ™ ˜Ø#(¨1¡9¨q¡=˜Ü$ñ%ð"# H¬t¯x©x¼¿ ¹ ÀUÓ8KÓ/LÑ$LРMØ!" H¬t¯x©x¼¿ ¹ ÀUÓ8KÓ/LÑ$LРMð+ô%ó ðr1é´rbéé)rH)rnúSequence[float]roÚfloatÚreturnztuple[float, ...])rBr'Ú
draw_linesr<Úlistr?rrrxÚrangeÚlenrdÚdegreesÚatan2ÚpiesliceÚline)r,rEr+rHÚjointr)ÚpointsÚiÚpointrFrGÚanglesrsÚflippedÚcoordsÚ
gap_coordss   `            r/rzImageDraw.lineês&ø€ðl‰l˜4Ó  Ñ#ˆØ ‰?Ø I‰I×  Ñ    S¨%Ô 0ؘӠE¨A£Iä˜b ™e¤d¬E ]Ô3Ü!¤(¬8´E©?Ñ";¸RÓ@‘Fô"' q¬#¨b«'°1Ó!5öàôœX¤e™_¬e°B°q¸1¸q¹5°MÓ.BÕCðFðô˜q¤# f£+°¡/Ó2ó7=AØ" 1™IEð
$ A¨¡E™]¨EÐ2Ø" F¨1¨q©5¡MÐ2ð+÷ñ'˜E 3ôŸ ™ ¤T§Z¡Z°°A±¸¸q¹Ñ0AÀ5ÈÁ8ÈcÐRSÉfÑCTÓ%UÓVØóðFñð˜a‘y F¨1¡IÒ-à ð Ø.ð Ø7<ð à*õ ð˜q™     F¨1¡IÑ-ÒM°&¸±)¸c±/ÀFÈ1ÁIÑ2MòQà  ™) f¨Q¡iÑ/ÒO°F¸1±IÀ±OÀfÈQÁiÑ4Oðð˜q™ E¨A¡IÑ-°Ñ1°5¸±8¸eÀa¹iÑ3GÈ!Ñ3KÐLؘq™ E¨A¡IÑ-°Ñ1°5¸±8¸eÀa¹iÑ3GÈ!Ñ3KÐLðFñØ&,¨Q¡i°"¡n°f¸Q±iÀ"±n˜s™à&,¨Q¡i°"¡n°f¸Q±iÀ"±n˜s˜Ø—M‘M &¨%°"©*°c¸B±hÀÔEà˜q”yá"á .¨u°f¸Q±iÀ"±nÓ EØ %Ù .¨u°f¸Q±iÀ"±nÓ Eð*™Jñ!/¨u°f¸Q±iÀ"±nÓ EØ %Ù .¨u°f¸Q±iÀ"±nÓ Eð*˜Jð
Ÿ    ™     *¨d¸!˜    Ö<ño7=ð%.Ðð ùòùó s Â-I,Ã9AI1cóؗ|j«|j||«\}}||jj||d«|$||k7r|jj||d«yyy)z(Experimental) Draw a shape.Nrr)ÚcloserBr'Ú draw_outline)r,Úshaper+rQr)rRs      r/rzImageDraw.shape7se€ð     ‰ Œ ØŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I× "Ñ " 5¨(°AÔ 6Ø ˆ?˜s hšØ I‰I× "Ñ " 5¨#¨qÕ 1ð /ˆ?r1cóΗ|j||«\}}||jj||||d«|-||k7r'|dk7r!|jj||||d|«yyyy)zDraw a pieslice.Nrr)rBr'Ú draw_pieslicerPs             r/r€zImageDraw.piesliceEsn€ðŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I× #Ñ # B¨¨s°H¸aÔ @Ø ˆ?˜s hš°5¸A²:Ø I‰I× #Ñ # B¨¨s°C¸¸EÕ Bð4>˜ˆ?r1cój—|j|«\}}||jj||«yy)z#Draw one or more individual pixels.N)rBr'Ú draw_points)r,rEr+r)s    r/r…zImageDraw.pointUs2€à—L‘L Ó&‰    ˆˆTØ ˆ?Ø I‰I× !Ñ ! " cÕ *ð r1có—|j||«\}}||jj||d«|Ó||k7rÍ|dk7rÇ|dk(r|jj||d|«y|j–t    j
d|jj «}|jd«d}t|«}    |    jj||d«|jj||d|dzdz
|j«yyyyy)zDraw a polygon.Nrrrr_)rBr'Ú draw_polygonr%rÚnewÚsizeÚDraw)
r,rEr+rQrHr)rRÚmaskÚmask_inkr's
          r/ÚpolygonzImageDraw.polygon[sí€ðŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I× "Ñ " 2 x°Ô 3Ø ˆ?˜s hš°5¸A²:ؘŠzØ—    ‘    ×&Ñ& r¨3°°5Õ9Ø—‘Ð$ô—y‘y  d§g¡g§l¡lÓ3ØŸ<™<¨›?¨1Ñ-Ü˜D“zØ—    ‘    ×&Ñ& r¨8°QÔ7à—    ‘    ×&Ñ& r¨3°°5¸1±9¸q±=À$Ç'Á'ÕJð%ð4>˜ˆ?r1cóF—t|||«}|j||||«y)zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr™)r,Úbounding_circleÚn_sidesÚrotationr+rQrHrEs        r/Úregular_polygonzImageDraw.regular_polygonss$€ô/¨ÀÈÓ RˆØ  ‰ R˜˜w¨Õ.r1cóƗ|j||«\}}||jj||d«|+||k7r%|dk7r|jj||d|«yyyy)zDraw a rectangle.Nrr)rBr'Údraw_rectanglerVs       r/Ú    rectanglezImageDraw.rectangle€sf€ðŸ ™  W¨dÓ3‰ ˆˆXØ Ð Ø I‰I× $Ñ $ R¨°1Ô 5Ø ˆ?˜s hš°5¸A²:Ø I‰I× $Ñ $ R¨¨a°Õ 7ð4>˜ˆ?r1)Úcornersc óà‡‡‡‡‡‡‡‡‡‡‡‡—t|dttf«r(tttt
|«\\ŠŠ\ŠŠnttt
|«\ŠŠŠŠ‰‰kr d}t |«‚‰‰kr d}t |«‚‰€dŠ|dzŠt‰«Št‰«Št‰«Št‰«Šd\ŠŠt‰«r<‰‰‰z
dz
k\Љr‰‰z
Љ‰‰z
dz
k\Љr‰‰z
Љr‰r‰j|||‰«S‰dk(s t‰«s‰j|||‰«St‰dz«}‰j||«\ŠŠd ˆˆˆˆˆˆˆˆˆˆˆˆf d    „ }    ‰|    d
«‰r.‰jj‰‰|zdz‰‰|z
dz
f‰d«n>‰|z
dz
‰|zdzkDr-‰jj‰|zdz‰‰|z
dz
‰f‰d«‰s¢‰s ‰‰‰|z‰g}
‰dr|
dxx|dzz cc<‰d r|
d xx|dzzcc<‰jj|
‰d«‰|z
‰‰‰g} ‰dr| dxx|dzz cc<‰dr| d xx|dzzcc<‰jj| ‰d«‰h‰‰k7ra‰dk7rZ|    d «‰s¦‰‰‰‰‰zdz
g} ‰dr| dxx|dzz cc<‰dr| dxx|dzzcc<‰jj| ‰d«‰‰‰z
dz‰‰g} ‰d r| dxx|dzz cc<‰dr| dxx|dzzcc<‰jj| ‰d«‰s§‰‰‰‰zdz
‰g}
‰dr|
dxx|dzz cc<‰d r|
d xx|dzzcc<‰jj|
‰d«‰‰z
dz‰‰‰g} ‰dr| dxx|dzz cc<‰dr| d xx|dzzcc<‰jj| ‰d«yyyyy)zDraw a rounded rectangle.rz&x1 must be greater than or equal to x0z&y1 must be greater than or equal to y0N)TTTTr_)FFrc óÀ• —‰r‰ ‰ ‰ ‰z‰ ‰zfddf‰ ‰‰z
‰ ‰z‰fddff}nv‰r‰ ‰ ‰ ‰z‰ ‰zfddf‰ ‰z
‰ ‰ ‰ ‰zfddff}nUtˆfd„t‰ ‰ ‰ ‰z‰ ‰zfddf‰ ‰z
‰ ‰ ‰ ‰zfddf‰ ‰z
‰‰z
‰ ‰fddf‰ ‰‰z
‰ ‰z‰fddff«D««}|D]A}|r‰    jj|‰dfzŽŒ$‰    jj|‰‰
fzŽŒCy)Nrtr`rrbéc3ó2•K—|]\}}‰|r|–—Œy­wr;©)rgr„Úpartr£s   €r/rjzDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Ós&øèø€ò ᘘ4ð˜q’zôñ ùsƒr)r?Ú    enumerater'rrD)r€Úpartsr©r£ÚdrRÚfull_xÚfull_yr)r,rHÚx0Úx1Úy0Úy1s   €€€€€€€€€€€€r/Ú draw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_cornersÃsfø€áð˜"˜b 1™f b¨1¡fÐ-¨s°CÐ8ؘ"˜q™& " q¡&¨"Ð-¨q°#Ð6ð‘ñð˜"˜b 1™f b¨1¡fÐ-¨r°3Ð7ؘ1‘f˜b " b¨1¡fÐ-¨s°BÐ7ð‘ô ó ä#,à  " b¨1¡f¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨"¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨1¡f¨b°"Ð5°q¸"Ð=Ø  " q¡&¨"¨q©&°"Ð5°r¸3Ð?ð    ó$ô ó ðò ?ÙØ+D—I‘I×+Ñ+¨d°hÀ°]Ñ.BÒDà&D—I‘I×&Ñ&¨°°e° Ñ)<Ò>ñ     ?r1TrvF)r€ÚboolryÚNone)r<r{r?rrrxr"ÚroundÚallrWÚanyr¢ÚintrBr'r¡)r,rErYr+rQrHr£r.Úrr³ÚleftÚrightÚtopÚbottomr¬rRr­r®r)r¯r°r±r²s`    ``       @@@@@@@@@r/Úrounded_rectanglezImageDraw.rounded_rectangleŽsWÿû€ô b˜‘eœd¤E˜]Ô +Ü!%¤h¬x¼©Ñ&?ÀÓ!DÑ ‰HˆR‘hr™2ä!¤(¬5¡/°2Ó6‰NˆBB˜Ø Š7Ø:ˆCܘS“/Ð !Ø Š7Ø:ˆCܘS“/Ð !Ø ˆ?Ø.ˆGà Q‰Jˆä 2‹YˆÜ 2‹YˆÜ 2‹YˆÜ 2‹YˆØ%‰ˆÜ ˆwŒ<ؘ"˜r™' A™+Ñ%ˆFÙà˜‘GØ˜"˜r™' A™+Ñ%ˆFÙà˜‘GÙ™&à—|‘| B¨¨g°uÓ=Ð=à Š6œ˜Wœð—>‘> " d¨G°UÓ;Ð ;ä Q‘‹KˆØŸ ™  W¨dÓ3‰ ˆˆX÷     ?÷     ?ð     ?ðD Ñ Ù ˜Ô áØ—    ‘    ×(Ñ(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ8ÐUVÕWؐa‘˜!‘˜b 1™f q™jÒ(Ø—    ‘    ×(Ñ(¨"¨q©&°1©*°b¸"¸q¹&À1¹*ÀbÐ)IÈ8ÐUVÔWÙ¡&ؘB  Q¡¨Ð+Ø˜1’:ؘ“G˜q 1™uÑ$“Gؘ1’:ؘ“G˜q 1™uÑ$“GØ—    ‘    ×(Ñ(¨¨x¸Ô;à˜a™  R¨Ð,Ø˜1’:ؘ!“H  A¡Ñ%“Hؘ1’:ؘ!“H  A¡Ñ%“HØ—    ‘    ×(Ñ(¨°¸!Ô<Ø ‰?˜s h›°5¸A³:Ù ˜Ô áØ˜2˜r 2¨¡:°¡>Ð2Ø˜1’:ؘ“F˜a !™e‘O“Fؘ1’:ؘ“F˜a !™e‘O“FØ—    ‘    ×(Ñ(¨¨c°1Ô5à˜b 5™j¨1™n¨b°"Ð5Ø˜1’:ؘ1“I  Q¡Ñ&“Iؘ1’:ؘ1“I  Q¡Ñ&“IØ—    ‘    ×(Ñ(¨°°aÔ8ÙØ˜B  U¡
¨Q¡°Ð3Ø˜1’:ؘ“G˜q 1™uÑ$“Gؘ1’:ؘ“G˜q 1™uÑ$“GØ—    ‘    ×(Ñ(¨¨s°AÔ6à˜e™ a™¨¨R°Ð4Ø˜1’:ؘ!“H  A¡Ñ%“Hؘ1’:ؘ!“H  A¡Ñ%“HØ—    ‘    ×(Ñ(¨°°QÕ7ðð#4>˜ˆ?r1có^‡‡‡‡‡    ‡
‡ ‡‡‡‡—t|tj«r|Šnm|€ ‰j‰j    d««}tj||‰j
|‰‰    ‰
«Š‰ r‰j «| r‰j| | «dˆfd„ }||«}|€yd}‰jr ‰j|‰j«n|}‰j‰‰|«D]C\ŠŠŠddˆˆˆˆ ˆ    ˆˆˆ
ˆˆˆf d„ }|"||‰j«||k7sŒ3||«Œ<||«ŒEy)z
Draw text.Nr8có@•—‰j|«\}}|€|€J‚|S|Sr;)rB)r+r)rRr,s   €r/ÚgetinkzImageDraw.text.<locals>.getink?s0ø€Ø ŸL™L¨Ó.‰MˆCØˆ{ØÐ+Ð+Ð+ؐ؈Jr1c ó´• —‰j}|dk(r‰rd}g}td«D]}|jt‰|««Œ!t    j
‰d«dt    j
‰d«df}    ‰j j‰|g‰ ¢­‰‰‰|d‰ ||dœ‰¤Ž\}}|d|dz|d|dzg}|dk(r’||jd«}}tjd    |«d}    |jd|    «|\}
} ‰jB‰jj!||
| |
|j"dz| |j"dzf|«yy‰j$j'|||«y#t$rY    ‰j j‰|‰‰‰|‰ |g‰ ¢­d|i‰¤Ž}n*#t$r‰j j‰«}YnwxYwYŒwxYw)
Nrrr_rT)Ú    directionÚfeaturesÚlanguageÚ stroke_widthÚ stroke_filledÚanchorr)rFrFrvr„)r*r|Úappendr¹rdÚmodfrÚgetmask2ÚAttributeErrorÚgetmaskÚ    TypeErrorÚgetbandÚstructÚpackÚfillbandr%Úpaster•r'rL)r)rÇr!rnr„rFr—ÚoffsetÚcolorÚ    ink_alpharprqrÉÚargsrÄÚembedded_colorrÅÚ
image_textÚkwargsrÆrr,rEs            €€€€€€€€€€€r/Ú    draw_textz!ImageDraw.text.<locals>.draw_textTs#ø€Ø—}‘}Ø 1Ò$©Ø!Dؐܘq›ò-AØ—L‘L¤ R¨¡U£Õ,ð-䟙 2 a¡5Ó)¨!Ñ,¬d¯i©i¸¸1¹Ó.>¸qÑ.AÐBð =Ø#; :§?¡?×#;Ñ#;ØØð $ðñ $ð#,Ø!)Ø!)Ø%1Ø&*Ø%ØØ#ñ $ð!ñ $‘LD˜&ð# 1™X¨¨q©    Ñ1°5¸±8¸fÀQ¹iÑ3GÐHEð$˜6’>ð#'¨¯ © °Q«˜4EÜ &§ ¡ ¨C°Ó 5°aÑ 8IØ—N‘N 1 iÔ0Ø ‘DAqØ—w‘wÐ*ØŸ™Ÿ ™ Ø! A q¨!¨d¯i©i¸©lÑ*:¸AÀÇ    Á    È!Á Ñ<LÐ#MÈtõð+ð
—I‘I×)Ñ)¨%°°sÕ;øô=&ò=ð=Ø6˜zŸ™×6Ñ6ؠؠØ%Ø$Ø$Ø(Ø"Øð  ð"ò  ð#(ð  ð%ñ  ™øô%ò=Ø)Ÿ™×6Ñ6°tÓ<šð=ýð=ús7Á=AE5Å5    GÅ?)F)Æ(GÆ)$GÇ GÇGÇGÇG)r+ú _Ink | Noneryr¹)r)r)r¹rÇrxryrµ) r<r    ÚTextr9Úgetr!Ú embed_colorÚstrokerÇÚ stroke_fillÚ_split)r,rEÚtextr+rrÉÚspacingÚalignrÄrÅrÆrÇrârÙrØrÛrÂr)Ú
stroke_inkrÜrÚrs``   `  ```  ```    @@r/räzImageDraw.texts2ÿú€ô0 dœIŸN™NÔ +؉Jàˆ|Ø—}‘} V§Z¡Z° Ó%<Ó=Ü"Ÿ™Ød˜DŸI™I w°    ¸8ÀXóˆJñØ×&Ñ&Ô(ÙØ×!Ñ! ,° Ô<õ    ñT‹lˆØ ˆ;Ø àˆ
Ø × "Ò "ð×)Ñ)Ð5ñz×-Ñ-Ô.àð ð !+× 1Ñ 1°"°f¸eÓ DòC    Ñ ˆB˜÷6 <÷6 <ð6 <ðpÐ%á˜* j×&=Ñ&=Ô>ð˜*Ó$Ù˜c•Nñ˜#•ñGC    r1©r8có@—|j|||||||||    |
| | | |¬«S©Nrè)rä)r,rErär+rrÉrårærÄrÅrÆrÇrârÙr8s               r/Úmultiline_textzImageDraw.multiline_text—sD€ð.y‰yØ Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Øðó
ð    
r1có¶—|€|j|«}tj|||j|||¬«}|r|j    «|j «S)z@Get the length of a given string, in pixels with 1/64 precision.)rÄrÅrÆ)r9r    rÞr!ràÚ
get_length)    r,rärrÄrÅrÆrÙr8rÚs             r/Ú
textlengthzImageDraw.textlength¿s[€ð" ˆ<Ø—=‘= Ó+ˆDÜ—^‘^Ø Ø Ø I‰IØØØô 
ˆ
ñ Ø × "Ñ "Ô $Ø×$Ñ$Ó&Ð&r1c     óâ—|€|j| «}tj|||j||||    «} | r| j    «|
r| j |
«| j |||«S)z2Get the bounding box of a given string, in pixels.)r9r    rÞr!ràráÚget_bbox)r,rErärrÉrårærÄrÅrÆrÇrÙr8rÚs              r/ÚtextbboxzImageDraw.textbboxÞso€ð, ˆ<Ø—=‘= Ó+ˆDÜ—^‘^Ø $˜Ÿ    ™     7¨I°xÀó
ˆ
ñ Ø × "Ñ "Ô $Ù Ø × Ñ ˜lÔ +Ø×"Ñ" 2 v¨uÓ5Ð5r1c ó<—|j|||||||||    |
| | ¬« Srê)rñ) r,rErärrÉrårærÄrÅrÆrÇrÙr8s              r/Úmultiline_textbboxzImageDraw.multiline_textbboxÿs>€ð*}‰}Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Øðó 
ð     
r1r;)r%ú Image.Imager!ú
str | Noneryrµ)ryúGImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r8ú float | Noneryrö)r)rÝr+rÝryztuple[int | None, int | None])Nr) rErrFrxrGrxr+rÝrHr¹ryrµ)rEz Sequence[int]rMrôr+rÝryrµ)NNr)rErrFrxrGrxr+rÝrQrÝrHr¹ryrµ)
rErr+rÝrQrÝrHr¹ryrµ) rErwrYrxr+rÝrQrÝrHr¹ryrµ)NrN)
rErr+rÝrHr¹r‚rõryrµ)NN)rzImage.core._Outliner+rÝrQrÝryrµ)rErr+rÝryrµ)rNNr)rœú!Sequence[Sequence[float] | float]rr¹ržrxr+rÝrQrÝrHr¹ryrµ)rErrYrxr+rÝrQrÝrHr¹r£z$tuple[bool, bool, bool, bool] | Noneryrµ) NNNr^r»NNNrNF) rEútuple[float, float]räzAnyStr | ImageText.Textr+rÝrrrÉrõrårxrær=rÄrõrÅúlist[str] | NonerÆrõrÇrxrârÝrÙr´rØr rÛr ryrµ)rErùrär r+rÝrrrÉrõrårxrær=rÄrõrÅrúrÆrõrÇrxrârÝrÙr´r8r÷ryrµ)NNNNF)rär rrrÄrõrÅrúrÆrõrÙr´r8r÷ryrx)    NNr^r»NNNrF)rErùrär rrrÉrõrårxrær=rÄrõrÅrúrÆrõrÇrxrÙr´r8r÷ryz!tuple[float, float, float, float])Ú__name__Ú
__module__Ú __qualname__rÚ__annotations__r0r6r9rBrIrMrSrWr[rrr€r…r™rŸr¢r¿rärërîrñrór¨r1r/rr=sE…ð     ð    ØVó ô&ðPà    Póð6"Ø%ð"à    Pó"ð59ð'Øð'Ø&1ð'à    &ó'ð<!Øð ;à ð ;ðð ;ðð     ;ð
ð ;ð ð ;ð
ó ;ðKOð    6Øð    6Ø)4ð    6Ø<Gð    6à     ó    6ð !Ø#Øð@à ð@ðð@ðð    @ð
ð @ð ð @ðð@ð
ó@ð&!Ø#Øð 6à ð 6ðð 6ðð     6ð
ð 6ð
ó 6ð$!Ø#Øð
7à ð
7ðð
7ðð    
7ð
ð
7ð ð
7ð
ó
7ð!ØØ ð K=à ðK=ððK=ðð    K=ð
ð K=ð
ó K=ð`!Ø#ð     2à"ð 2ðð 2ðð     2ð
 
ó 2ð&!Ø#ØðCà ðCððCðð    Cð
ð Cð ð CððCð
óCô +ð!Ø#Øð Kà ðKððKðð    Kð
ð Kð
ó Kð8Ø Ø#Øð /à:ð /ðð /ðð     /ð
ð /ð ð /ðð /ð
ó /ð !Ø#Øð 8à ð 8ðð 8ðð     8ð
ð 8ð
ó 8ð"Ø Ø#Øð J8ð9=ñJ8à ðJ8ððJ8ðð    J8ð
ð J8ð ð J8ð6ðJ8ð
óJ8ð`!ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'{à ð{ð&ð{ðð    {ð  ð {ðð{ðð{ðð{ðð{ð#ð{ð ð!{ð"ð#{ð$!ð%{ð&ð'{ð(ð){ð*ð+{ð,
ó-{ðB!ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'&
ð*#'ñ+&
à ð&
ðð&
ðð    &
ð  ð &
ðð&
ðð&
ðð&
ðð&
ð#ð&
ð ð!&
ð"ð#&
ð$!ð%&
ð&ð'&
ð* ð+&
ð,
ó-&
ð` Ø $Ø%)Ø#Ø$ð'ð#'ñ'àð'ð ð    'ðð'ð#ð'ðð'ðð'ð ð'ð
ó'ðP Ø!ØØØ $Ø%)Ø#ØØ$ð#6ð&#'ñ'6à ð6ðð6ð
 ð 6ðð6ðð6ðð6ðð6ð#ð6ðð6ð ð!6ð"ð#6ð& ð'6ð(
+ó)6ðT Ø!ØØØ $Ø%)Ø#ØØ$ð#"
ð&#'ñ'"
à ð"
ðð"
ð
 ð "
ðð"
ðð"
ðð"
ðð"
ð#ð"
ðð"
ð ð!"
ð"ð#"
ð& ð'"
ð(
+ô)"
r1rcó^—    t|d«|«S#t$rt||«cYSwxYw)a‹
    A simple 2D drawing interface for PIL images.
 
    :param im: The image to draw in.
    :param mode: Optional mode to use for color values.  For RGB
       images, this argument can be RGB or RGBA (to blend the
       drawing into the image).  For all other modes, this argument
       must be the same as the image mode.  If omitted, the mode
       defaults to the mode of the image.
    Úgetdraw)ÚgetattrrÍr)r%r!s  r/r–r–$s7€ð#Ø%Œwr˜9Ó% dÓ+Ð+øÜ ò#ܘ˜TÓ"Ò"ð#ús ‚”,«,cóB—ddlm}||j|«nd}||fS)zm
    :param im: The image to draw in.
    :returns: A (drawing context, drawing resource factory) tuple.
    r)rN)r4rr–)r%rr's   r/rr5s(€õ
à"$ .ˆ?ˆ:?‰?˜2Ô °d€DØ Ð Ðr1có(—|j«}|€J‚|\}}    |||f}t||«|kry||||f<||fh}    t    «}
|    rŸt    «} |    D]ˆ\}}|dz|f|dz
|f||dzf||dz
ffD]f\} } | | f|
vs
| dks| dkrŒ    || | f}|
j | | f«|€t||«|k}n|||fv}|sŒM||| | f<| j | | f«ŒhŒŠ|    }
| }    |    rŒžyy#ttf$rYywxYw#ttf$rYŒšwxYw)aï
    .. warning:: This method is experimental.
 
    Fills a bounded region with a given color.
 
    :param image: Target image.
    :param xy: Seed position (a 2-item coordinate tuple). See
        :ref:`coordinate-system`.
    :param value: Fill color.
    :param border: Optional border value.  If given, the region consists of
        pixels with a color different from the border color.  If not given,
        the region consists of pixels having the same color as the seed
        pixel.
    :param thresh: Optional threshold value which specifies a maximum
        tolerable difference of a pixel value from the 'background' in
        order for it to be replaced. Useful for filling regions of
        non-homogeneous, but similar, colors.
    Nrr)rKÚ _color_diffr"Ú
IndexErrorÚsetÚadd)ÚimagerEÚvalueÚborderÚthreshÚpixelrprqÚ
backgroundÚedgeÚ    full_edgeÚnew_edgeÚsÚtrhr+s                r/Ú    floodfillr@s‰€ð6 J‰J‹L€EØ Ð ÐÐ Ø D€A€qðؘ1˜a˜4‘[ˆ
Ü u˜jÓ )¨VÒ 3Ø Øˆˆaˆd‰ ðˆFˆ8€Dô“€IÙ
Ü“5ˆØò    -‰DˆAˆqؘa™% ˜ a¨!¡e¨Q Z°!°Q¸±U°¸aÀÀQÁ¸ZÐHò -‘1àq6˜YÑ&¨!¨aª%°1°q²5Øð -ؘa ˜d™ Að—M‘M 1 a &Ô)ؐ~Ü*¨1¨jÓ9¸VÑC™à ¨°¨Ð7˜ÚØ&+˜˜a ˜d™ Ø Ÿ ™  a¨ VÕ,ñ! -ð    -ð$ˆ    Øˆô+ øô œ
Ð #òÙðûô#¤JÐ/òÙðús(›C*²C*ÂC?Ã*C<Ã;C<Ã?DÄDc󪇇    ‡
—t|t«s d}t|«‚|dkr d}t|«‚t|tt
f«s d}t|«‚t |«dk(rCtd„|D««s d}t|«‚tttt    |««^Š    Š
nÄt |«dk(r©t|dtt
f«rtd    „|dD««rt|d
ttf«s d}t|«‚t |d«dk7r d }t|«‚tttt    |d««Š    tt|d
«Š
n d }t|«‚‰
dkr d }t|«‚t|ttf«s d}t|«‚dˆ    fd„ Šdˆˆ
fd„ }dd„}|||«}|Dcgc]
}||«‘Œ c}Scc}w)u‘
    Generate a list of vertices for a 2D regular polygon.
 
    :param bounding_circle: The bounding circle is a sequence defined
        by a point and radius. The polygon is inscribed in this circle.
        (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``)
    :param n_sides: Number of sides
        (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon)
    :param rotation: Apply an arbitrary rotation to the polygon
        (e.g. ``rotation=90``, applies a 90 degree rotation)
    :return: List of regular polygon vertices
        (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``)
 
    How are the vertices computed?
    1. Compute the following variables
        - theta: Angle between the apothem & the nearest polygon vertex
        - side_length: Length of each polygon edge
        - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle)
        - polygon_radius: Polygon radius (last element of bounding_circle)
        - angles: Location of each polygon vertex in polar grid
            (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0])
 
    2. For each angle in angles, get the polygon vertex at that angle
        The vertex is computed using the equation below.
            X= xcos(φ) + ysin(φ)
            Y= âˆ’xsin(φ) + ycos(φ)
 
        Note:
            Ï† = angle in degrees
            x = 0
            y = polygon_radius
 
        The formula above assumes rotation around the origin.
        In our case, we are rotating around the centroid.
        To account for this, we use the formula below
            X = xcos(φ) + ysin(φ) + centroid_x
            Y = âˆ’xsin(φ) + ycos(φ) + centroid_y
    zn_sides should be an intrvzn_sides should be an int > 2z$bounding_circle should be a sequencec3óHK—|]}t|ttf«–—Œy­wr;©r<r¹rx©rgr„s  r/rjz4_compute_regular_polygon_vertices.<locals>.<genexpr>¹sèø€ÒH°1”:˜a¤#¤u ×.ÑHùó‚ "z0bounding_circle should only contain numeric datar_rc3óHK—|]}t|ttf«–—Œy­wr;rrs  r/rjz4_compute_regular_polygon_vertices.<locals>.<genexpr>¿s èø€ò
Ø,-ŒJqœ3¤˜,× 'ñ
ùrrzBbounding_circle centre should contain 2D coordinates (e.g. (x, y))z[bounding_circle should contain 2D coordinates and a radius (e.g. (x, y, r) or ((x, y), r) )z$bounding_circle radius should be > 0z"rotation should be an int or floatc óЕ—t|dtjtjd|z
««z|dtjtjd|z
««zz
‰dzd«t|dtjtjd|z
««z|dtjtjd|z
««zz‰dzd«fS)Nrr`rr_)r¶rdrkrlrm)r…r~Úcentroids  €r/Ú_apply_rotationz:_compute_regular_polygon_vertices.<locals>._apply_rotationÜsÕø€ä ؐa‘œ4Ÿ8™8¤D§L¡L°°w±Ó$?Ó@Ñ@ؘ‘(œTŸX™X¤d§l¡l°3¸±=Ó&AÓBÑBñCà˜1‘+ñðó     ô ؐa‘œ4Ÿ8™8¤D§L¡L°°w±Ó$?Ó@Ñ@ؘ‘(œTŸX™X¤d§l¡l°3¸±=Ó&AÓBÑBñCà˜1‘+ñðó     ð 
ð     
r1có•—‰dg}‰||«S©Nrr¨)roÚ start_pointrÚpolygon_radiuss  €€r/Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertexìsø€Ø% qÐ)ˆ Ù˜{¨EÓ2Ð2r1cóŒ—g}d|z }dd|zz
|z}t|«D]#}|j|«||z }|dkDsŒ|dz}Œ%|S)Nr`r¦gà?)r|rÊ)rržr†r~Ú current_angleÚ_s      r/Ú _get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesðse€ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆ ܐw“ò    %ˆAØ M‰M˜-Ô (Ø ˜WÑ $ˆMؘsÓ"Ø Ñ$‘ ð        %ð
ˆ r1)r…ú list[float]r~rxryrù)rorxryrù)rr¹ržrxryr&)
r<r¹rÏr"r{r?r}r·rrx) rœrržr.r!r%r†rorrr s         @@@r/r›r›sÄú€ôV gœsÔ #Ø(ˆÜ˜‹nÐØ‚{Ø,ˆÜ˜‹oÐô o¬¬e }Ô 5Ø4ˆÜ˜‹nÐä
ˆ?Ó˜qÒ ÜÑH¸ÔHÔHØDˆCܘS“/Ð !ä$(¬¬e©´d¸?Ó6KÓ$LÑ!ˆ‘>Ü     ˆ_Ó     Ò    "¤z°/À!Ñ2DÄtÌUÀmÔ'TÜñ
Ø1@ÀÑ1Cô
ô
ä˜O¨AÑ.´´e° Ô=ØDˆCܘS“/Ð !ä ˆ˜qÑ!Ó " aÒ 'ØVˆCܘS“/Ð !䜜U™ ¤T¨/¸!Ñ*<Ó%=Ó>ˆÜœe _°QÑ%7Ó8‰ð <ð     ô˜‹oÐà˜ÒØ4ˆÜ˜‹oÐô h¤¤e  Ô -Ø2ˆÜ˜‹oÐõ
ö 3ó
ñ˜ (Ó +€Fð9?Ö ?¨uÑ # EÕ *Ò ?Ð?ùÒ ?sÆ>Gc󨇇—t|t«r|n|fŠt|t«r|n|fŠtˆˆfd„tt    ‰««D««S)zJ
    Uses 1-norm distance to calculate difference between two values.
    c3óF•K—|]}t‰|‰|z
«–—Œy­wr;)Úabs)rgr„ÚfirstÚseconds  €€r/rjz_color_diff.<locals>.<genexpr> s#øèø€ÒE¨QŒs5˜‘8˜f Q™iÑ'×(ÑEùsƒ!)r<r?Úsumr|r})Úcolor1Úcolor2r*r+s  @@r/rrsCù€ô ! ¬Ô/‰F°f°Y€EÜ! &¬%Ô0‰V°v°i€Fä ÔE´%¼¸F» Ó2DÔEÓ EÐEr1r;)r%rôr!rõryr)r%zImage.Image | Noneryz)tuple[ImageDraw2.Draw | None, ModuleType]r) rrôrEztuple[int, int]r    úfloat | tuple[int, ...]r
zfloat | tuple[int, ...] | Noner rxryrµ)rœrørr¹ržrxryzlist[tuple[float, float]])r-r/r.r/ryrx)!Ú
__future__rrdrÑÚcollections.abcrÚtypingrr4rrr    Ú TYPE_CHECKINGr
Útypesr r r rrÚ_typingrrr&rQrrþrr–rrr›rr¨r1r/ú<module>r6sþðö@#ã Û Ý$Ýç*Ñ*à€ ÙÝ(Ý ß"ç'ß%ð.3¯Z©Z×-?Ñ-?€Р   *Ó?ð÷d 
ñd 
ôN#ô"ð.2Øð >Ø ð>àð>ð #ð>ð +ð    >ð
ð >ð 
ó >ðB@Ø6ð@ØADð@ØPUð@àó@ðD    FØ #ð    FØ-Dð    Fà
ô    Fr1