intellecton/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc

350 lines
38 KiB
Text
Raw Normal View History

<EFBFBD>
߼j<><6A><00><01>N<00>UddlmZddlZddlZddlmZddlmZddlm Z m
Z
m Z dZ e r$ddlm Z dd lmZdd
lmZmZdd lmZmZdd lmZmZe j.j0Zd ed< Gd<0F>d<10>Zddd<11>Zddd<12>Z d dd<13>Z dd<14>Z dd<15>Z y)<1D>)<01> annotationsN)<01>Sequence)<01>cast<73>)<03>Image<67>
ImageColor<EFBFBD> ImageTextF)<01>Callable)<01>
ModuleType)<02>Any<6E>AnyStr)<02>
ImageDraw2<EFBFBD> ImageFont)<02>Coords<64>_Inkz!Callable[[], Image.core._Outline]<5D>Outlinec<01><><00>eZdZUdZded<ddd<04>Z dd<05>Z dd<06>Z d d d<07>Z d! d"d<08>Z d d#d <09>Z
d$ d%d
<EFBFBD>Z d$ d&d <0B>Z d$ d'd <0C>Z d( d)d <0A>Z d* d+d<0E>Z d$ d%d<0F>Zdd,d<10>Z d$ d&d<11>Z d- d.d<12>Z d$ d&d<13>Z d-dd<14> d/d<15>Z d0 d1d<16>Z d0dd<17> d2d<18>Z d3dd<17> d4d<19>Z d5dd<17> d6d<1A>Z d5dd<17> d6d<1B>Zy)7<> ImageDrawN<77>NImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None<6E>fontc<01>N<00>|j<00>d}|<02> |j}||jk7r$|dk(r|jdk(rd}n d}t|<04><00>|dk(r|j|_nd|_||_|j
|_t jj|j
|<03>|_||_|dvr!|jjd<05>|_
n |jjd <09>|_
|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<42>RGBrz mode mismatch<63>P)<02>I<>F<><46><EFBFBD><EFBFBD><EFBFBD>)<04>1rrrr<00>LF) <0A>_ensure_mutable<6C>mode<64>
ValueError<EFBFBD>palette<74>_image<67>imr<00>core<72>draw<61>draw_ink<6E>ink<6E>fontmode<64>fill)<05>selfr%r!<00>blend<6E>msgs <20>P/home/antigravity/intellecton/venv/lib/python3.12/site-packages/PIL/ImageDraw.py<70>__init__zImageDraw.__init__Bs<><00><00> <0B><1A><1A><1C><11><05> <0F><<3C><15>7<EFBFBD>7<EFBFBD>D<EFBFBD> <0F>2<EFBFBD>7<EFBFBD>7<EFBFBD>?<3F><13>v<EFBFBD>~<7E>"<22>'<27>'<27>U<EFBFBD>"2<><19><05>%<25><03> <20><13>o<EFBFBD>%<25> <0F>3<EFBFBD>;<3B><1D>:<3A>:<3A>D<EFBFBD>L<EFBFBD><1F>D<EFBFBD>L<EFBFBD><18><04> <0B><14>%<25>%<25><04><07><19>J<EFBFBD>J<EFBFBD>O<EFBFBD>O<EFBFBD>D<EFBFBD>G<EFBFBD>G<EFBFBD>U<EFBFBD>3<><04> <09><18><04> <09> <0F>:<3A> <1D><1B>y<EFBFBD>y<EFBFBD>)<29>)<29>!<21>,<2C>D<EFBFBD>H<EFBFBD><1B>y<EFBFBD>y<EFBFBD>)<29>)<29>"<22>-<2D>D<EFBFBD>H<EFBFBD> <0F>'<27> '<27><1F>D<EFBFBD>M<EFBFBD><1A><04> <09> <20>D<EFBFBD>M<EFBFBD><19><04> <09>c<01>j<00>|jsddlm}|j<00>|_|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<00>r)r<00>r<00> load_default)r,rs r/<00>getfontzImageDraw.getfontjs*<00><00>(<14>y<EFBFBD>y<EFBFBD> #<23>.<2E> <09>.<2E>.<2E>0<>D<EFBFBD>I<EFBFBD><13>y<EFBFBD>y<EFBFBD>r1c<01>V<00>|<01>ddlm}|j|<01>S|j<00>S)Nrr3)r4rr5r6)r,<00> font_sizers r/<00>_getfontzImageDraw._getfont<6E>s,<00><00> <15> <20> #<23>)<29>9<EFBFBD>)<29>)<29>)<29>4<> 4<><17><<3C><<3C>><3E> !r1c<01><><00>d}d}|<01>.|<02>,|jr|j}||fS|j}||fS|<01><>t|t<00>r t j
||j <00>}|jr6t|t<00>r&|jj ||j<00>}|jj|<01>}|<02><>t|t<00>r t j
||j <00>}|jr6t|t<00>r&|jj ||j<00>}|jj|<02>}||fS<00>N) r+r)<00>
isinstance<EFBFBD>strr<00>getcolorr!r#<00>tupler$r'r()r,r)r+<00>
result_ink<EFBFBD> result_fills r/<00>_getinkzImageDraw._getink<6E>s <00><00><1A>
<EFBFBD><1A> <0B> <0E>;<3B>4<EFBFBD><<3C><13>y<EFBFBD>y<EFBFBD>"<22>h<EFBFBD>h<EFBFBD> <0B> <1A>;<3B>&<26>&<26>"<22>X<EFBFBD>X<EFBFBD>
<EFBFBD><1A>;<3B>&<26>&<26><13><EFBFBD><1D>c<EFBFBD>3<EFBFBD>'<27>$<24>-<2D>-<2D>c<EFBFBD>4<EFBFBD>9<EFBFBD>9<EFBFBD>=<3D>C<EFBFBD><17><<3C><<3C>J<EFBFBD>s<EFBFBD>E<EFBFBD>$:<3A><1E>,<2C>,<2C>/<2F>/<2F><03>T<EFBFBD>[<5B>[<5B>A<>C<EFBFBD>!<21>Y<EFBFBD>Y<EFBFBD>/<2F>/<2F><03>4<>
<EFBFBD><13><1F><1D>d<EFBFBD>C<EFBFBD>(<28>%<25>.<2E>.<2E>t<EFBFBD>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>?<3F>D<EFBFBD><17><<3C><<3C>J<EFBFBD>t<EFBFBD>U<EFBFBD>$;<3B><1F><<3C><<3C>0<>0<><14>t<EFBFBD>{<7B>{<7B>C<>D<EFBFBD>"<22>i<EFBFBD>i<EFBFBD>0<>0<><14>6<> <0B><19>;<3B>&<26>&r1c<01>p<00>|j|<04>\}}|<06> |jj|||||<05>yy)z Draw an arc.N)rBr'<00>draw_arc)r,<00>xy<78>start<72>endr+<00>widthr)s r/<00>arcz ImageDraw.arc<72>s:<00><00><19>L<EFBFBD>L<EFBFBD><14>&<26> <09><03>T<EFBFBD> <0E>?<3F> <10>I<EFBFBD>I<EFBFBD> <1E> <1E>r<EFBFBD>5<EFBFBD>#<23>s<EFBFBD>E<EFBFBD> :<3A> r1c<01><><00>|j<00>|j|<03>\}}|<04>|}|<04>(|jj||j|<04>yy)zDraw a bitmap.N)<05>loadrBr'<00> draw_bitmapr%)r,rE<00>bitmapr+r)s r/rMzImageDraw.bitmap<61>sM<00><00> <0F> <0B> <0B> <0A><18>L<EFBFBD>L<EFBFBD><14>&<26> <09><03>T<EFBFBD> <0E>;<3B><16>C<EFBFBD> <0E>?<3F> <10>I<EFBFBD>I<EFBFBD> !<21> !<21>"<22>f<EFBFBD>i<EFBFBD>i<EFBFBD><13> 5<> r1c<01><><00>|j||<04>\}}|<08>|jj||||d<02>|<07>-||k7r'|dk7r!|jj||||d|<06>yyyy)z Draw a chord.Nrr)rBr'<00>
draw_chord<EFBFBD> r,rErFrGr+<00>outlinerHr)<00>fill_inks r/<00>chordzImageDraw.chord<72>sn<00><00><1D> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> <20> <20><12>U<EFBFBD>C<EFBFBD><18>1<EFBFBD> =<3D> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A> <10>I<EFBFBD>I<EFBFBD> <20> <20><12>U<EFBFBD>C<EFBFBD><13>a<EFBFBD><15> ?<3F>4><3E><EFBFBD>?r1c<01><><00>|j||<02>\}}|<06>|jj||d<02>|<05>+||k7r%|dk7r|jj||d|<04>yyyy)zDraw an ellipse.Nrr)rBr'<00> draw_ellipse<73>r,rEr+rQrHr)rRs r/<00>ellipsezImageDraw.ellipse<73>sf<00><00><1D> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> "<22> "<22>2<EFBFBD>x<EFBFBD><11> 3<> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A> <10>I<EFBFBD>I<EFBFBD> "<22> "<22>2<EFBFBD>s<EFBFBD>A<EFBFBD>u<EFBFBD> 5<>4><3E><EFBFBD>?r1c<01>h<00>|d|z
|d|z
|d|z|d|zf}|j||||<05>y)z4Draw a circle given center coordinates and a radius.rrN)rW)r,rE<00>radiusr+rQrH<00>
ellipse_xys r/<00>circlezImageDraw.circle<6C>sD<00><00><19><11>e<EFBFBD>f<EFBFBD>n<EFBFBD>b<EFBFBD><11>e<EFBFBD>f<EFBFBD>n<EFBFBD>b<EFBFBD><11>e<EFBFBD>f<EFBFBD>n<EFBFBD>b<EFBFBD><11>e<EFBFBD>f<EFBFBD>n<EFBFBD>U<>
<EFBFBD> <0C> <0C> <0C>Z<EFBFBD><14>w<EFBFBD><05>6r1c <01><><00><03>|j|<02>d}|<05><02>R|jj||<05><03>|dk(<00>r.<2E>dkD<00>r't|dtt
f<02>rt ttt|<01>}nGtdt|<01>d<05>D<00>cgc](}t ttt |||dz<00><00><00><02>*}}tdt|<06>dz
<00>D<00>]<5D>}||}||dz
|f|||dzffD<00> <09>
cgc]C\} }
tjtj|
d| dz
| d|
dz
<00><00>dz<00><02>E} } }
| d| dk(r<01>w d<0E>fd<08> } | d| dkDxr| dd z
| dkDxs| d| dkxr| dd z| dkD} |d<00>dz z
dz|d<00>dz z
dzf|d<00>dz zdz
|d<00>dz zdz
fg}| r| dd
z| dd
z}
} n| dd
z
| dd
z
}
} |j|| d
z
|
d
z
|<02><00>d kDs<02><01>7| r | || dd
z<00>|| || dd
z<00>g}n| || dd
z
<00>|| || dd
z
<00>g}|j||d <0C> <0A><00><01><>yyyycc}wcc}
} w)z6Draw a line, or a connected sequence of line segments.rN<>curve<76><00>r<00>hc <01><><00><01>|\}}|dz}<01>dz dz
}td<04>||tjtj|<01><00>zf||tjtj|<01><00>zffD<00><00>S)N<>Zr_rc3<01><>K<00>|]9\}}||dkDrtj|<02>ntj|<02>z<00><01><00>;y<01>w)rN)<03>math<74>floor<6F>ceil)<03>.0<EFBFBD>p<>p_ds r/<00> <genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>s9<00><00><><00>%<1A> &<26><01>3<EFBFBD><1E>C<EFBFBD>!<21>G<EFBFBD><14><1A><1A>C<EFBFBD><1F><14><19><19>3<EFBFBD><1E>P<>%<1A>s<00>?A)r?rd<00>cos<6F>radians<6E>sin)<06>coord<72>angle<6C>x<>y<>distancerHs <20>r/<00>coord_at_anglez&ImageDraw.line.<locals>.coord_at_angle s<><00><><00> %<25><04><01>1<EFBFBD><1D><12> <0B><05>#(<28>1<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D><08>$<24>%<1A>"#<23>H<EFBFBD>t<EFBFBD>x<EFBFBD>x<EFBFBD><04> <0C> <0C>U<EFBFBD>8K<38>/L<>$L<> M<>!"<22>H<EFBFBD>t<EFBFBD>x<EFBFBD>x<EFBFBD><04> <0C> <0C>U<EFBFBD>8K<38>/L<>$L<> M<>+<1E>%<1A> <1A>r1<00><>rb<00><00>)rH)rn<00>Sequence[float]ro<00>float<61>returnztuple[float, ...])rBr'<00>
draw_linesr<<00>listr?rrrx<00>range<67>lenrd<00>degrees<65>atan2<6E>pieslice<63>line)r,rEr+rH<00>jointr)<00>points<74>i<>pointrFrG<00>anglesrs<00>flipped<65>coords<64>
gap_coordss ` r/r<>zImageDraw.line<6E>s&<00><><00><13>l<EFBFBD>l<EFBFBD>4<EFBFBD> <20><11>#<23><03> <0E>?<3F> <10>I<EFBFBD>I<EFBFBD> <20> <20><12>S<EFBFBD>%<25> 0<><14><07><1F>E<EFBFBD>A<EFBFBD>I<EFBFBD><1D>b<EFBFBD><11>e<EFBFBD>d<EFBFBD>E<EFBFBD>]<5D>3<>!<21>(<28>8<EFBFBD>E<EFBFBD>?<3F>";<3B>R<EFBFBD>@<40>F<EFBFBD>"'<27>q<EFBFBD>#<23>b<EFBFBD>'<27>1<EFBFBD>!5<><16><1D><1D>X<EFBFBD>e<EFBFBD>_<EFBFBD>e<EFBFBD>B<EFBFBD>q<EFBFBD>1<EFBFBD>q<EFBFBD>5<EFBFBD>M<EFBFBD>.B<>C<><16>F<EFBFBD><16><1F>q<EFBFBD>#<23>f<EFBFBD>+<2B><01>/<2F>2<>7=<3D>A<EFBFBD>"<22>1<EFBFBD>I<EFBFBD>E<EFBFBD>
$<24>A<EFBFBD><01>E<EFBFBD>]<5D>E<EFBFBD>2<>"<22>F<EFBFBD>1<EFBFBD>q<EFBFBD>5<EFBFBD>M<EFBFBD>2<>+<1A><16>'<27>E<EFBFBD>3<EFBFBD><1D> <0C> <0C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD><03>A<EFBFBD><06><15>q<EFBFBD><18>0A<30>5<EFBFBD><11>8<EFBFBD>c<EFBFBD>RS<52>f<EFBFBD>CT<43>%U<>V<><1D><1E><16>F<EFBFBD><16><1E>a<EFBFBD>y<EFBFBD>F<EFBFBD>1<EFBFBD>I<EFBFBD>-<2D> <20> <1A>.<2E> <1A>7<<3C> <1A>*<2A> <1A><1F>q<EFBFBD> <09>F<EFBFBD>1<EFBFBD>I<EFBFBD>-<2D>M<>&<26><11>)<29>c<EFBFBD>/<2F>F<EFBFBD>1<EFBFBD>I<EFBFBD>2M<32>Q<01> <20><11>)<29>f<EFBFBD>Q<EFBFBD>i<EFBFBD>/<2F>O<>F<EFBFBD>1<EFBFBD>I<EFBFBD><03>O<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>4O<34><1C><1F>q<EFBFBD><18>E<EFBFBD>A<EFBFBD>I<EFBFBD>-<2D><01>1<>5<EFBFBD><11>8<EFBFBD>e<EFBFBD>a<EFBFBD>i<EFBFBD>3G<33>!<21>3K<33>L<><1E>q<EFBFBD><18>E<EFBFBD>A<EFBFBD>I<EFBFBD>-<2D><01>1<>5<EFBFBD><11>8<EFBFBD>e<EFBFBD>a<EFBFBD>i<EFBFBD>3G<33>!<21>3K<33>L<><16>F<EFBFBD><1F>&,<2C>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD>s<EFBFBD><05>&,<2C>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD>s<EFBFBD><05><18>M<EFBFBD>M<EFBFBD>&<26>%<25>"<22>*<2A>c<EFBFBD>B<EFBFBD>h<EFBFBD><04>E<><1C>q<EFBFBD>y<EFBFBD>"<22> .<2E>u<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD> E<> %<25> .<2E>u<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD> E<>*<1E>J<EFBFBD>!/<2F>u<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD> E<> %<25> .<2E>u<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>"<22>n<EFBFBD> E<>*<1E>J<EFBFBD>
<1D> <09> <09>*<2A>d<EFBFBD>!<21> <09><<3C>o7=<3D>%.<2E><1F> <1B><><16><> s <00>-I,<04>9AI1c<01><><00>|j<00>|j||<02>\}}|<05>|jj||d<02>|<04>$||k7r|jj||d<03>yyy)z(Experimental) Draw a shape.Nrr)<04>closerBr'<00> draw_outline)r,<00>shaper+rQr)rRs r/r<>zImageDraw.shape7se<00><00> <0E> <0B> <0B> <0A><1C> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> "<22> "<22>5<EFBFBD>(<28>A<EFBFBD> 6<> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD> <10>I<EFBFBD>I<EFBFBD> "<22> "<22>5<EFBFBD>#<23>q<EFBFBD> 1<> /<2F>?r1c<01><><00>|j||<04>\}}|<08>|jj||||d<02>|<07>-||k7r'|dk7r!|jj||||d|<06>yyyy)zDraw a pieslice.Nrr)rBr'<00> draw_pieslicerPs r/r<>zImageDraw.piesliceEsn<00><00><1D> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> #<23> #<23>B<EFBFBD><05>s<EFBFBD>H<EFBFBD>a<EFBFBD> @<40> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A> <10>I<EFBFBD>I<EFBFBD> #<23> #<23>B<EFBFBD><05>s<EFBFBD>C<EFBFBD><11>E<EFBFBD> B<>4><3E><EFBFBD>?r1c<01>j<00>|j|<02>\}}|<03>|jj||<03>yy)z#Draw one or more individual pixels.N)rBr'<00> draw_points)r,rEr+r)s r/r<>zImageDraw.pointUs2<00><00><18>L<EFBFBD>L<EFBFBD><14>&<26> <09><03>T<EFBFBD> <0E>?<3F> <10>I<EFBFBD>I<EFBFBD> !<21> !<21>"<22>c<EFBFBD> *<2A> r1c<01><00>|j||<02>\}}|<06>|jj||d<02>|<05><>||k7r<>|dk7r<>|dk(r|jj||d|<04>y|j<00><>t j
d|jj <00>}|jd<02>d}t|<07>} | jj||d<02>|jj||d|dzdz
|j<00>yyyyy)zDraw a polygon.Nrrrr_)rBr'<00> draw_polygonr%r<00>new<65>size<7A>Draw)
r,rEr+rQrHr)rR<00>mask<73>mask_inkr's
r/<00>polygonzImageDraw.polygon[s<><00><00><1D> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> "<22> "<22>2<EFBFBD>x<EFBFBD><11> 3<> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A><14><01>z<EFBFBD><14> <09> <09>&<26>&<26>r<EFBFBD>3<EFBFBD><01>5<EFBFBD>9<><15><17><17>$<24><1D>y<EFBFBD>y<EFBFBD><13>d<EFBFBD>g<EFBFBD>g<EFBFBD>l<EFBFBD>l<EFBFBD>3<><04><1F><<3C><<3C><01>?<3F>1<EFBFBD>-<2D><08><1B>D<EFBFBD>z<EFBFBD><04><14> <09> <09>&<26>&<26>r<EFBFBD>8<EFBFBD>Q<EFBFBD>7<><14> <09> <09>&<26>&<26>r<EFBFBD>3<EFBFBD><01>5<EFBFBD>1<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D>$<24>'<27>'<27>J<>%<25>4><3E><EFBFBD>?r1c<01>F<00>t|||<03>}|j||||<06>y)zDraw a regular polygon.N)<02>!_compute_regular_polygon_verticesr<73>)r,<00>bounding_circle<6C>n_sides<65>rotationr+rQrHrEs r/<00>regular_polygonzImageDraw.regular_polygonss$<00><00>/<2F><EFBFBD><07><18> R<><02> <0C> <0C> <0C>R<EFBFBD><14>w<EFBFBD><05>.r1c<01><><00>|j||<02>\}}|<06>|jj||d<02>|<05>+||k7r%|dk7r|jj||d|<04>yyyy)zDraw a rectangle.Nrr)rBr'<00>draw_rectanglerVs r/<00> rectanglezImageDraw.rectangle<6C>sf<00><00><1D> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> <13> <1F> <10>I<EFBFBD>I<EFBFBD> $<24> $<24>R<EFBFBD><18>1<EFBFBD> 5<> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A> <10>I<EFBFBD>I<EFBFBD> $<24> $<24>R<EFBFBD><13>a<EFBFBD><15> 7<>4><3E><EFBFBD>?r1)<01>cornersc <01><><00><00><05><06><0E><0F><10><11><12><13><14><15><16>t|dttf<02>r(tttt
|<01>\\<00><13>\<00><14>nttt
|<01>\<00><13><15><14><16><14>kr d}t |<07><00><01><16>kr d}t |<07><00><01><06>d<05>|dz<00>t<00><13><00>t<00><15><00>t<00><14><00>t<00><16><00>d\<00><10>t<00><06>r<<3C><0E><14>z
dz
k\<00><10>r<05><14>z
<00><0E><0E><16>z
dz
k\<00><11>r<05><16>z
<00><0E>r<16>r<14>j|||<04><05>S<00>dk(s t<00><06>s<14>j|||<04><05>St<00>dz<00>}<08>j||<03>\<00><12>d <0A><06><0E><0F><10><11><12><00><05><13><14><15>f d <09> } <09><0F><01>| d
<EFBFBD><00>r.<2E>jj<00><13>|zdz<00><14>|z
dz
f<04>d<08>n><3E>|z
dz
<00>|zdzk\r-<2D>jj<00>|zdz<00><15>|z
dz
<00>f<04>d<08><00>s<><73>s<><73><13><15>|z<00>g}
<EFBFBD>dr|
dxx|dzz cc<<00>d r|
d xx|dzzcc<<00>jj|
<EFBFBD>d<08><00>|z
<00><15><14>g} <0B>dr| dxx|dzz cc<<00>dr| d xx|dzzcc<<00>jj| <0B>d<08><00><12><01>h<EFBFBD><12>k7<00>ra<72>dk7<00>rZ| d <0C><00>s<><73><13><15><14><15>zdz
g} <0C>dr| dxx|dzz cc<<00>dr| dxx|dzzcc<<00>jj| <0C>d<08><00><13><16>z
dz<00><14>g} <0A>d r| dxx|dzz cc<<00>dr| dxx|dzzcc<<00>jj| <0A>d<08><00>s<><73><13><15><13>zdz
<00>g}
<EFBFBD>dr|
dxx|dzz cc<<00>d r|
d xx|dzzcc<<00>jj|
<EFBFBD>d<08><00><14>z
dz<00><15><14>g} <0B>dr| dxx|dzz cc<<00>dr| d xx|dzzcc<<00>jj| <0B>d<08>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 <01><><00> <0C><00>r<1F> <0B> <0A> <0B>z<00> <0A>zfddf<03> <0B><0E>z
<00> <0B>z<00>fddff}nv<6E>r<1F> <0B> <0A> <0B>z<00> <0A>zfddf<03> <0C>z
<00> <0A> <0C> <0A>zfddff}nUt<00>fd<06>t<00> <0B> <0A> <0B>z<00> <0A>zfddf<03> <0C>z
<00> <0A> <0C> <0A>zfddf<03> <0C>z
<00><0E>z
<00> <0C>fddf<03> <0B><0E>z
<00> <0B>z<00>fddff<04>D<00><00>}|D]A}|r<00> jj|<02>dfz<00><00>$<00> jj|<02><08>
fz<00><00>Cy)Nrtr`rrb<00>c3<01>2<00>K<00>|]\}}<02>|r|<02><01><00>y<00>wr;<00>)rgr<><00>partr<74>s <20>r/rjzDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr><3E>s&<00><><00><><00> <12><1F><01>4<EFBFBD><1F>q<EFBFBD>z<EFBFBD><19> <12>s<00>r)r?<00> enumerater'r<>rD)r<><00>partsr<73>r<><00>drR<00>full_x<5F>full_yr)r,rH<00>x0<78>x1<78>y0<79>y1s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r/<00> draw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_corners<72>sf<00><><00><15><19>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>b<EFBFBD>1<EFBFBD>f<EFBFBD>-<2D>s<EFBFBD>C<EFBFBD>8<><18>"<22>q<EFBFBD>&<26>"<22>q<EFBFBD>&<26>"<22>-<2D>q<EFBFBD>#<23>6<><12><05><18><19>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>b<EFBFBD>1<EFBFBD>f<EFBFBD>-<2D>r<EFBFBD>3<EFBFBD>7<><18>1<EFBFBD>f<EFBFBD>b<EFBFBD>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>-<2D>s<EFBFBD>B<EFBFBD>7<><12><05> <1E> <12>#,<2C> <20>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>b<EFBFBD>1<EFBFBD>f<EFBFBD>5<>s<EFBFBD>C<EFBFBD>@<40> <20>1<EFBFBD>f<EFBFBD>b<EFBFBD>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>5<>s<EFBFBD>C<EFBFBD>@<40> <20>1<EFBFBD>f<EFBFBD>b<EFBFBD>1<EFBFBD>f<EFBFBD>b<EFBFBD>"<22>5<>q<EFBFBD>"<22>=<3D> <20>"<22>q<EFBFBD>&<26>"<22>q<EFBFBD>&<26>"<22>5<>r<EFBFBD>3<EFBFBD>?<3F> <1A>$<16> <12> <12><05><1E> ?<3F><04><1B>+<2B>D<EFBFBD>I<EFBFBD>I<EFBFBD>+<2B>+<2B>d<EFBFBD>h<EFBFBD><01>]<5D>.B<>D<>&<26>D<EFBFBD>I<EFBFBD>I<EFBFBD>&<26>&<26><14><13>e<EFBFBD> <0C>)<<3C>><3E>  ?r1TrvF)r<><00>boolry<00>None)r<r{r?rrrxr"<00>round<6E>allrW<00>anyr<79><00>intrBr'r<>)r,rErYr+rQrHr<>r.<00>rr<72><00>left<66>right<68>top<6F>bottomr<6D>rRr<>r<>r)r<>r<>r<>r<>s` `` @@@@@@@@@r/<00>rounded_rectanglezImageDraw.rounded_rectangle<6C>sW<00><><EFBFBD><00> <16>b<EFBFBD><11>e<EFBFBD>d<EFBFBD>E<EFBFBD>]<5D> +<2B>!%<25>h<EFBFBD>x<EFBFBD><05><EFBFBD>&?<3F><12>!D<> <1E>H<EFBFBD>R<EFBFBD><12>h<EFBFBD>r<EFBFBD>2<EFBFBD>!<21>(<28>5<EFBFBD>/<2F>2<EFBFBD>6<>N<EFBFBD>B<EFBFBD><02>B<EFBFBD><02> <0A><02>7<EFBFBD>:<3A>C<EFBFBD><1C>S<EFBFBD>/<2F> !<21> <0A><02>7<EFBFBD>:<3A>C<EFBFBD><1C>S<EFBFBD>/<2F> !<21> <12>?<3F>.<2E>G<EFBFBD> <12>Q<EFBFBD>J<EFBFBD><01> <12>2<EFBFBD>Y<EFBFBD><02> <12>2<EFBFBD>Y<EFBFBD><02> <12>2<EFBFBD>Y<EFBFBD><02> <12>2<EFBFBD>Y<EFBFBD><02>%<25><0E><06><06> <0E>w<EFBFBD><<3C><16>"<22>r<EFBFBD>'<27>A<EFBFBD>+<2B>%<25>F<EFBFBD><15><16><12>G<EFBFBD><01><16>"<22>r<EFBFBD>'<27>A<EFBFBD>+<2B>%<25>F<EFBFBD><15><16><12>G<EFBFBD><01><15>&<26><1B>|<7C>|<7C>B<EFBFBD><04>g<EFBFBD>u<EFBFBD>=<3D>=<3D> <0C><01>6<EFBFBD><13>W<EFBFBD><1C><18>><3E>><3E>"<22>d<EFBFBD>G<EFBFBD>U<EFBFBD>;<3B> ;<3B> <0F><01>Q<EFBFBD><06>K<EFBFBD><01><1C> <0C> <0C>W<EFBFBD>d<EFBFBD>3<> <0A><03>X<EFBFBD> ?<3F> ?<3F> ?<3F>D <14> <1F> <18><14> <1E><15><14> <09> <09>(<28>(<28>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>q<EFBFBD>j<EFBFBD>"<22>b<EFBFBD>1<EFBFBD>f<EFBFBD>q<EFBFBD>j<EFBFBD>)I<>8<EFBFBD>UV<55>W<><13>a<EFBFBD><16>!<21><1A>r<EFBFBD>A<EFBFBD>v<EFBFBD><01>z<EFBFBD>)<29><14> <09> <09>(<28>(<28>"<22>q<EFBFBD>&<26>1<EFBFBD>*<2A>b<EFBFBD>"<22>q<EFBFBD>&<26>1<EFBFBD>*<2A>b<EFBFBD>)I<>8<EFBFBD>UV<55>W<><19>&<26><1A>B<EFBFBD><02>Q<EFBFBD><06><02>+<2B><04><1A>1<EFBFBD>:<3A><18><11>G<EFBFBD>q<EFBFBD>1<EFBFBD>u<EFBFBD>$<24>G<EFBFBD><1A>1<EFBFBD>:<3A><18><11>G<EFBFBD>q<EFBFBD>1<EFBFBD>u<EFBFBD>$<24>G<EFBFBD><14> <09> <09>(<28>(<28><14>x<EFBFBD><11>;<3B><1B>a<EFBFBD><16><12>R<EFBFBD><12>,<2C><05><1A>1<EFBFBD>:<3A><19>!<21>H<EFBFBD><01>A<EFBFBD><05>%<25>H<EFBFBD><1A>1<EFBFBD>:<3A><19>!<21>H<EFBFBD><01>A<EFBFBD><05>%<25>H<EFBFBD><14> <09> <09>(<28>(<28><15><08>!<21><<3C> <0E>?<3F>s<EFBFBD>h<EFBFBD><EFBFBD>5<EFBFBD>A<EFBFBD>:<3A> <18><15> <1F><19><19>2<EFBFBD>r<EFBFBD>2<EFBFBD><05>:<3A><01>><3E>2<><03><1A>1<EFBFBD>:<3A><17><01>F<EFBFBD>a<EFBFBD>!<21>e<EFBFBD>O<EFBFBD>F<EFBFBD><1A>1<EFBFBD>:<3A><17><01>F<EFBFBD>a<EFBFBD>!<21>e<EFBFBD>O<EFBFBD>F<EFBFBD><14> <09> <09>(<28>(<28><13>c<EFBFBD>1<EFBFBD>5<><1C>b<EFBFBD>5<EFBFBD>j<EFBFBD>1<EFBFBD>n<EFBFBD>b<EFBFBD>"<22>5<><06><1A>1<EFBFBD>:<3A><1A>1<EFBFBD>I<EFBFBD><11>Q<EFBFBD><15>&<26>I<EFBFBD><1A>1<EFBFBD>:<3A><1A>1<EFBFBD>I<EFBFBD><11>Q<EFBFBD><15>&<26>I<EFBFBD><14> <09> <09>(<28>(<28><16><13>a<EFBFBD>8<><19><1A>B<EFBFBD><02>U<EFBFBD>
<EFBFBD>Q<EFBFBD><0E><02>3<><04><1A>1<EFBFBD>:<3A><18><11>G<EFBFBD>q<EFBFBD>1<EFBFBD>u<EFBFBD>$<24>G<EFBFBD><1A>1<EFBFBD>:<3A><18><11>G<EFBFBD>q<EFBFBD>1<EFBFBD>u<EFBFBD>$<24>G<EFBFBD><14> <09> <09>(<28>(<28><14>s<EFBFBD>A<EFBFBD>6<><1B>e<EFBFBD><1A>a<EFBFBD><1E><12>R<EFBFBD><12>4<><05><1A>1<EFBFBD>:<3A><19>!<21>H<EFBFBD><01>A<EFBFBD><05>%<25>H<EFBFBD><1A>1<EFBFBD>:<3A><19>!<21>H<EFBFBD><01>A<EFBFBD><05>%<25>H<EFBFBD><14> <09> <09>(<28>(<28><15><03>Q<EFBFBD>7<><1A>#4><3E><EFBFBD>?r1c <01>N<00><00><08> <09>
<EFBFBD> <0A><0E><0F><14><15>t|tj<00>r|<02>nm|<04> <20>j<00>j d<02><00>}tj||<04>j
|<06><08> <09>
<EFBFBD><00><14> r<10>j <00>| r<12>j| | <0C>d<05>fd<03> }||<03>}|<11>yd}<12>jr <20>j<00>|<10>j<00>n|}<12>j|||<07>D]=<00>dd<07><0E><08> <0A> <09><14><0F>
<EFBFBD><15>f d<04> }|<12>"||<12>j<00>||k7s<01>-||<11><00>6||<11><00>?y)z
Draw text.Nr8c<01>@<00><01><00>j|<00>\}}|<01>|<02>J<00>|S|Sr;)rB)r+r)rRr,s <20>r/<00>getinkzImageDraw.text.<locals>.getink?s0<00><><00> <20>L<EFBFBD>L<EFBFBD><14>.<2E>M<EFBFBD>C<EFBFBD><18><12>{<7B><1F>+<2B>+<2B>+<2B><1F><0F><16>Jr1c <01><00> <09><00>j}|dk(r<04> rd}t<00>j<00>}t<00>j<00>}t j
<00>j<00>dt j
<00>j<00>df} <00>j j<00>j|g<02>
<EFBFBD><01><06> <0B> <0A>|d<03>j||d<04><08><0F><01>\}}||dz }||dz }|dk(r<>||jd<07>}}tjd|<00>d} |j!d| <09><00>j"<00>B<EFBFBD>j"j%|||||j&dz||j&dzf|<06>yy<00>j(j+||f||<00>y#t$rw <00>j j<00>j|<02> <0B> <0A>|<01>j|g<08>
<EFBFBD><01>d|i<01><0F><01>}n4#t$r(<00>j j<00>j<00>}YnwxYwY<00><01>1wxYw) NrrT)<08> direction<6F>features<65>language<67> stroke_width<74> stroke_filled<65>anchorr)rFrrFrvr<>)r*r<>rprqrd<00>modfr<00>getmask2<6B>textr<74><00>AttributeError<6F>getmask<73> TypeError<6F>getband<6E>struct<63>pack<63>fillbandr%<00>paster<65>r'rL)r)r<>r!rprqrFr<><00>offset<65>color<6F> ink_alpha<68>argsr<73><00>embedded_colorr<72><00>
image_text<EFBFBD>kwargsr<73>r<>r,s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r/<00> draw_textz!ImageDraw.text.<locals>.draw_textTs<00><><00><1B>}<7D>}<7D><04><1F>1<EFBFBD>$<24><1E>!<21>D<EFBFBD><17><04><06><06>K<EFBFBD><01><17><04><06><06>K<EFBFBD><01><1D><19><19>4<EFBFBD>6<EFBFBD>6<EFBFBD>*<2A>1<EFBFBD>-<2D>t<EFBFBD>y<EFBFBD>y<EFBFBD><14><16><16>/@<40><11>/C<>D<><05>!B<01>#;<3B>:<3A>?<3F>?<3F>#;<3B>#;<3B><1C> <09> <09><1C> $<16><1E> $<16>#,<2C>!)<29>!)<29>%1<>&*<2A>#<23>{<7B>{<7B><1F>#<23> $<16>!<21> $<16>L<EFBFBD>D<EFBFBD>&<26><16><16><01><19>N<EFBFBD>A<EFBFBD><15><16><01><19>N<EFBFBD>A<EFBFBD>$<18>6<EFBFBD>><3E>#'<27><04> <0C> <0C>Q<EFBFBD><0F>4<EFBFBD>E<EFBFBD> &<26> <0B> <0B>C<EFBFBD><13> 5<>a<EFBFBD> 8<>I<EFBFBD><19>N<EFBFBD>N<EFBFBD>1<EFBFBD>i<EFBFBD>0<><1B>w<EFBFBD>w<EFBFBD>*<2A><1C><07><07> <0A> <0A>!<21>A<EFBFBD>q<EFBFBD>!<21>d<EFBFBD>i<EFBFBD>i<EFBFBD><01>l<EFBFBD>*:<3A>A<EFBFBD><04> <09> <09>!<21> <0C><L<>#M<>t<EFBFBD><1A>+<2B>
<19>I<EFBFBD>I<EFBFBD>)<29>)<29>1<EFBFBD>a<EFBFBD>&<26>$<24><03><<3C><>;&<26>B<01>B<01>6<>z<EFBFBD><EFBFBD><EFBFBD>6<>6<> <20>I<EFBFBD>I<EFBFBD> <20>%<25>$<24>$<24>(<28> <20>K<EFBFBD>K<EFBFBD><1F> <1A>"<22> <1A>#(<28> <1A>%<25> <1A><04><>%<25>B<01>)<29><EFBFBD><EFBFBD>6<>6<>t<EFBFBD>y<EFBFBD>y<EFBFBD>A<><04>B<01><>B<01>s7<00>AF <00> H <03>=G<02>H <03>.H<05>?H <03>H<05>H <03>H )r+<00> _Ink | Noneryr<>)r)r)r<>r<>rxryr<>) r<r <00>Textr9<00>getr!<00> embed_color<6F>stroker<65><00> stroke_fill<6C>_split)r,rEr<>r+rr<><00>spacing<6E>alignr<6E>r<>r<>r<>r<>r<>r<>r<>r<>r)<00>
stroke_inkr<EFBFBD>r<>r<>s` ``` ``` @@r/r<>zImageDraw.texts&<00><><EFBFBD><00>0 <16>d<EFBFBD>I<EFBFBD>N<EFBFBD>N<EFBFBD> +<2B><1D>J<EFBFBD><13>|<7C><1B>}<7D>}<7D>V<EFBFBD>Z<EFBFBD>Z<EFBFBD> <0B>%<<3C>=<3D><04>"<22><1E><1E><14>d<EFBFBD>D<EFBFBD>I<EFBFBD>I<EFBFBD>w<EFBFBD> <09>8<EFBFBD>X<EFBFBD><0E>J<EFBFBD><1E><1A>&<26>&<26>(<28><1B><1A>!<21>!<21>,<2C> <0B><<3C> <17><15>T<EFBFBD>l<EFBFBD><03> <0E>;<3B> <12><19>
<EFBFBD> <15> "<22> "<22><1E>)<29>)<29>5<><17>z<EFBFBD>-<2D>-<2D>.<2E><18> <17> <1F>%<25>%<25>b<EFBFBD>&<26>%<25>8<>B <1F>D<EFBFBD>5 =<3D>5 =<3D>n<1A>%<25><19>*<2A>j<EFBFBD>&=<3D>&=<3D>><3E><17>*<2A>$<24><1D>c<EFBFBD>N<EFBFBD><1A>#<23><0E>EB r1<00>r8c<01>@<00>|j||||||||| |
| | | |<0E><01>S<00>Nr<4E>)r<>)r,rEr<>r+rr<>r<>r<>r<>r<>r<>r<>r<>r<>r8s r/<00>multiline_textzImageDraw.multiline_text<78>sD<00><00>.<14>y<EFBFBD>y<EFBFBD> <0E> <10> <10> <10> <12> <13> <11> <15> <14> <14> <18> <17> <1A><1F><19>
<EFBFBD>
r1c<01><><00>|<02>|j|<07>}tj|||j|||<05><01>}|r|j <00>|j <00>S)z@Get the length of a given string, in pixels with 1/64 precision.)r<>r<>r<>)r9r r<>r!r<><00>
get_length) r,r<>rr<>r<>r<>r<>r8r<>s r/<00>
textlengthzImageDraw.textlength<74>s[<00><00>" <10><<3C><17>=<3D>=<3D><19>+<2B>D<EFBFBD><1E>^<5E>^<5E> <10> <10> <10>I<EFBFBD>I<EFBFBD><1F><1D><1D> 
<EFBFBD>
<EFBFBD> <1A> <16> "<22> "<22> $<24><19>$<24>$<24>&<26>&r1c  <01><><00>|<03>|j| <0C>}tj|||j|||| <09>} | r| j <00>|
r| j |
<EFBFBD>| j |||<06>S)z2Get the bounding box of a given string, in pixels.)r9r r<>r!r<>r<><00>get_bbox)r,rEr<>rr<>r<>r<>r<>r<>r<>r<>r<>r8r<>s r/<00>textbboxzImageDraw.textbbox<6F>so<00><00>, <10><<3C><17>=<3D>=<3D><19>+<2B>D<EFBFBD><1E>^<5E>^<5E> <10>$<24><04> <09> <09>7<EFBFBD>I<EFBFBD>x<EFBFBD><18>
<EFBFBD>
<EFBFBD> <1A> <16> "<22> "<22> $<24> <17> <16> <1D> <1D>l<EFBFBD> +<2B><19>"<22>"<22>2<EFBFBD>v<EFBFBD>u<EFBFBD>5<>5r1c <01><<00>|j||||||||| |
| | <0C><01> Sr<>)r<>) r,rEr<>rr<>r<>r<>r<>r<>r<>r<>r<>r8s r/<00>multiline_textbboxzImageDraw.multiline_textbbox<6F>s><00><00>*<14>}<7D>}<7D> <0E> <10> <10> <12> <13> <11> <15> <14> <14> <18> <1A><1F><1D> 
<EFBFBD>
r1r;)r%<00> Image.Imager!<00>
str | Noneryr<>)ry<00>GImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r8<00> 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<><00>!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<00>tuple[float, float]r<>zAnyStr | ImageText.Text[AnyStr]r+r<>rrr<>r<>r<>rxr<>r=r<>r<>r<><00>list[str] | Noner<65>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])<1B>__name__<5F>
__module__<EFBFBD> __qualname__r<00>__annotations__r0r6r9rBrIrMrSrWr[r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r1r/rr=sE<00><00> <0A> <09>V<> <0A>&<1A>P<19> P<><19>6"<22>%<25>"<22> P<>"<22>59<35>'<27><1E>'<27>&1<>'<27> &<26>'<27><!<21><16> ;<3B> <12> ;<3B><15> ;<3B><13> ;<3B>
<1A> ;<3B> <13> ;<3B>
<0E> ;<3B>KO<01> 6<><1F> 6<>)4<> 6<><G<> 6<> <0A> 6<> !<21>#<23><16>@<01> <12>@<01><15>@<01><13> @<01>
<1A> @<01> <1D> @<01><13>@<01>
<0E>@<01>&!<21>#<23><16> 6<> <12> 6<><1A> 6<><1D> 6<>
<13> 6<>
<0E> 6<>$!<21>#<23><16>
7<> <1B>
7<><16>
7<><1A>
7<>
<1D>
7<> <13>
7<>
<0E>
7<>!<21><16> <20> K=<3D> <12>K=<3D><1A>K=<3D><13> K=<3D>
<1A> K=<3D>
<0E> K=<3D>`!<21>#<23> 2<>"<22> 2<><1A> 2<><1D> 2<>
<0E> 2<>&!<21>#<23><16>C<01> <12>C<01><15>C<01><13> C<01>
<1A> C<01> <1D> C<01><13>C<01>
<0E>C<01> +<2B>!<21>#<23><16> K<01> <12>K<01><1A>K<01><1D> K<01>
<13> K<01>
<0E> K<01>8<1C> <20>#<23><16> /<2F>:<3A> /<2F><15> /<2F><18> /<2F>
<1A> /<2F> <1D> /<2F><13> /<2F>
<0E> /<2F> !<21>#<23><16> 8<> <12> 8<><1A> 8<><1D> 8<>
<13> 8<>
<0E> 8<>"<1A> <20>#<23><16> J8<>9=<3D>J8<> <12>J8<><16>J8<><1A> J8<>
<1D> J8<> <13> J8<>6<>J8<>
<0E>J8<>`!<21> <11>!<21><1A><1B> $<24>%)<29>#<23><1F>#'<27>$<24>'z<1F> <1F>z<1F>.<2E>z<1F><1A> z<1F>  <13> z<1F><1B>z<1F><17>z<1F><13>z<1F><1E>z<1F>#<23>z<1F> <1D>!z<1F>"<1C>#z<1F>$!<21>%z<1F>&<1D>'z<1F>(<13>)z<1F>*<16>+z<1F>,
<0E>-z<1F>@!<21> <11>!<21><1A><1B> $<24>%)<29>#<23><1F>#'<27>$<24>'&
<EFBFBD>*#'<27>+&
<EFBFBD> <1F>&
<EFBFBD><15>&
<EFBFBD><1A> &
<EFBFBD>  <13> &
<EFBFBD><1B>&
<EFBFBD><17>&
<EFBFBD><13>&
<EFBFBD><1E>&
<EFBFBD>#<23>&
<EFBFBD> <1D>!&
<EFBFBD>"<1C>#&
<EFBFBD>$!<21>%&
<EFBFBD>&<1D>'&
<EFBFBD>* <20>+&
<EFBFBD>,
<0E>-&
<EFBFBD>` <11> $<24>%)<29>#<23>$<24>'<27>#'<27>'<27><14>'<27> <13> '<27><1E>'<27>#<23>'<27><1D>'<27><1D>'<27> <20>'<27>
<0F>'<27>P <11>!<21><1A><1B> $<24>%)<29>#<23><1F>$<24>#6<>&#'<27>'6<> <1F>6<><15>6<>
 <13> 6<><1B>6<><17>6<><13>6<><1E>6<>#<23>6<><1D>6<> <1C>!6<>"<1D>#6<>& <20>'6<>(
+<2B>)6<>T <11>!<21><1A><1B> $<24>%)<29>#<23><1F>$<24>#"
<EFBFBD>&#'<27>'"
<EFBFBD> <1F>"
<EFBFBD><15>"
<EFBFBD>
 <13> "
<EFBFBD><1B>"
<EFBFBD><17>"
<EFBFBD><13>"
<EFBFBD><1E>"
<EFBFBD>#<23>"
<EFBFBD><1D>"
<EFBFBD> <1C>!"
<EFBFBD>"<1D>#"
<EFBFBD>& <20>'"
<EFBFBD>(
+<2B>)"
r1rc<01>^<00> t|d<01>|<01>S#t$rt||<01>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.
<20>getdraw)<03>getattrr<72>r)r%r!s r/r<>r<>#s7<00><00>#<23>%<25>w<EFBFBD>r<EFBFBD>9<EFBFBD>%<25>d<EFBFBD>+<2B>+<2B><> <19>#<23><18><12>T<EFBFBD>"<22>"<22>#<23>s <00><00>,<03>,c<01>B<00>ddlm}|<00>|j|<00>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/r<>r<>4s(<00><00>
<1D>"$<24>.<2E>?<3F>:<3A>?<3F>?<3F>2<EFBFBD> <1E>d<EFBFBD>D<EFBFBD> <0F><1A> <1B>r1c<01>(<00>|j<00>}|<05>J<00>|\}} |||f}t||<08>|kry||||f<||fh} t <00>}
| r<>t <00>} | D]<5D>\}}|dz|f|dz
|f||dzf||dz
ffD]f\} } | | f|
vs
| dks| dkr<01> || | f}|
j | | f<02>|<03>t||<08>|k}n|||fv}|s<01>M||| | f<| j | | f<02><00>h<00><>| }
| } | r<01><>yy#ttf$rYywxYw#ttf$rY<00><>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<00> _color_diffr"<00>
IndexError<EFBFBD>set<65>add)<10>imagerE<00>value<75>border<65>thresh<73>pixelrprq<00>
background<EFBFBD>edge<67> full_edge<67>new_edge<67>s<>trhr+s r/<00> floodfillr?s<><00><00>6 <12>J<EFBFBD>J<EFBFBD>L<EFBFBD>E<EFBFBD> <10> <1C><1C> <1C> <0A>D<EFBFBD>A<EFBFBD>q<EFBFBD><0F><1A>1<EFBFBD>a<EFBFBD>4<EFBFBD>[<5B>
<EFBFBD> <16>u<EFBFBD>j<EFBFBD> )<29>V<EFBFBD> 3<> <12><1B><05>a<EFBFBD><11>d<EFBFBD> <0B><0F><01>F<EFBFBD>8<EFBFBD>D<EFBFBD><14><05>I<EFBFBD>
<0E><16>5<EFBFBD><08><18> -<2D>D<EFBFBD>A<EFBFBD>q<EFBFBD><1B>a<EFBFBD>%<25><11><1A>a<EFBFBD>!<21>e<EFBFBD>Q<EFBFBD>Z<EFBFBD>!<21>Q<EFBFBD><11>U<EFBFBD><1A>a<EFBFBD><11>Q<EFBFBD><15>Z<EFBFBD>H<> -<2D><04><01>1<EFBFBD><15>q<EFBFBD>6<EFBFBD>Y<EFBFBD>&<26>!<21>a<EFBFBD>%<25>1<EFBFBD>q<EFBFBD>5<EFBFBD><1C> -<2D><1D>a<EFBFBD><11>d<EFBFBD> <0B>A<EFBFBD><1E>M<EFBFBD>M<EFBFBD>1<EFBFBD>a<EFBFBD>&<26>)<29><1D>~<7E>*<2A>1<EFBFBD>j<EFBFBD>9<>V<EFBFBD>C<><04> <20><15><06><0F>7<><04><1B>&+<2B><05>a<EFBFBD><11>d<EFBFBD> <0B> <20> <0C> <0C>a<EFBFBD><11>V<EFBFBD>,<2C>! -<2D> -<2D>$<19> <09><17><04>+ <0F><> <17>
<EFBFBD> #<23><0F><0E><0F><>#<23>J<EFBFBD>/<2F><19><18><19>s(<00>C*<00>C*<00>C?<04>*C<<03>;C<<03>?D<07>Dc<01><><00><08> <09>
<EFBFBD>t|t<00>s d}t|<03><00>|dkr d}t|<03><00>t|tt
f<02>s d}t|<03><00>t |<00>dk(rCtd<05>|D<00><00>s d}t|<03><00>tttt |<00><00><00>^<00> <09>
n<EFBFBD>t |<00>dk(r<>t|dtt
f<02>r<>td <09>|dD<00><00>rt|d
ttf<02>s d}t|<03><00>t |d<00>dk7r d }t|<03><00>tttt |d<00><00><00> tt|d
<00><00>
n d }t|<03><00><01>
dkr d }t|<03><00>t|ttf<02>s d}t|<03><00>d<12> fd<0F> <0C>d<13><08>
fd<10> }dd<11>}|||<02>}|D<00>cgc]
}||<07><00><02> 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<01>HK<00>|]}t|ttf<02><00><01><00>y<00>wr;<00>r<r<>rx<00>rgr<>s r/rjz4_compute_regular_polygon_vertices.<locals>.<genexpr><3E>s<00><00><><00>H<>1<EFBFBD>:<3A>a<EFBFBD>#<23>u<EFBFBD><1C>.<2E>H<><48><00> "z0bounding_circle should only contain numeric datar_rc3<01>HK<00>|]}t|ttf<02><00><01><00>y<00>wr;rrs r/rjz4_compute_regular_polygon_vertices.<locals>.<genexpr><3E>s <00><00><><00>
<EFBFBD>,-<2D>J<EFBFBD>q<EFBFBD>3<EFBFBD><05>,<2C> '<27>
<EFBFBD>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 <01><><00><01>t|dtjtjd|z
<00><00>z|dtjtjd|z
<00><00>zz
<00>dzd<04>t|dtjtjd|z
<00><00>z|dtjtjd|z
<00><00>zz<00>dzd<04>fS)Nrr`rr_)r<>rdrkrlrm)r<>r~<00>centroids <20>r/<00>_apply_rotationz:_compute_regular_polygon_vertices.<locals>._apply_rotation<6F>s<><00><><00> <11><15>a<EFBFBD><08>4<EFBFBD>8<EFBFBD>8<EFBFBD>D<EFBFBD>L<EFBFBD>L<EFBFBD><13>w<EFBFBD><1D>$?<3F>@<40>@<40><17><01>(<28>T<EFBFBD>X<EFBFBD>X<EFBFBD>d<EFBFBD>l<EFBFBD>l<EFBFBD>3<EFBFBD><17>=<3D>&A<>B<>B<>C<01><1A>1<EFBFBD>+<2B><1E><12>  <0E> <12><15>a<EFBFBD><08>4<EFBFBD>8<EFBFBD>8<EFBFBD>D<EFBFBD>L<EFBFBD>L<EFBFBD><13>w<EFBFBD><1D>$?<3F>@<40>@<40><17><01>(<28>T<EFBFBD>X<EFBFBD>X<EFBFBD>d<EFBFBD>l<EFBFBD>l<EFBFBD>3<EFBFBD><17>=<3D>&A<>B<>B<>C<01><1A>1<EFBFBD>+<2B><1E><12>  <0E> 
<EFBFBD>
r1c<01><00><02><00>dg}<00>||<00>S<00>Nrr<>)ro<00> start_pointr<00>polygon_radiuss <20><>r/<00>_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex<65>s<00><><00>%<25>q<EFBFBD>)<29> <0B><1E>{<7B>E<EFBFBD>2<>2r1c<01><><00>g}d|z }dd|zz
|z}t|<00>D]#}|j|<04>||z }|dkDs<01>|dz}<04>%|S)Nr`r<>g<00>?)r|<00>append)r<>r<>r<>r~<00> current_angle<6C>_s r/<00> _get_anglesz6_compute_regular_polygon_vertices.<locals>._get_angles<65>se<00><00><13><06><15><07>-<2D><07><1C>s<EFBFBD>W<EFBFBD>}<7D>,<2C><08>8<> <0A><16>w<EFBFBD><1E> %<25>A<EFBFBD> <12>M<EFBFBD>M<EFBFBD>-<2D> (<28> <19>W<EFBFBD> $<24>M<EFBFBD><1C>s<EFBFBD>"<22><1D><13>$<24> <0A>  %<25>
<16> r1)r<><00> 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<>rorrrs @@@r/r<>r<><00>s<><00><><00>V <16>g<EFBFBD>s<EFBFBD> #<23>(<28><03><17><03>n<EFBFBD><1C><0E><11>{<7B>,<2C><03><18><13>o<EFBFBD><1D> <16>o<EFBFBD><04>e<EFBFBD>}<7D> 5<>4<><03><17><03>n<EFBFBD><1C>
<EFBFBD>?<3F><1B>q<EFBFBD> <20><12>H<><0F>H<>H<>D<>C<EFBFBD><1C>S<EFBFBD>/<2F> !<21>$(<28><14>e<EFBFBD><1B>d<EFBFBD>?<3F>6K<36>$L<>!<21><18>><3E> <0C>_<EFBFBD> <1D><11> "<22>z<EFBFBD>/<2F>!<21>2D<32>t<EFBFBD>U<EFBFBD>m<EFBFBD>'T<><12>
<EFBFBD>1@<40><11>1C<31>
<EFBFBD>
<EFBFBD><1B>O<EFBFBD>A<EFBFBD>.<2E><13>e<EFBFBD> <0C>=<3D>D<>C<EFBFBD><1C>S<EFBFBD>/<2F> !<21> <0E><EFBFBD>q<EFBFBD>!<21> "<22>a<EFBFBD> '<27>V<>C<EFBFBD><1C>S<EFBFBD>/<2F> !<21><17><04>U<EFBFBD> <0B>T<EFBFBD>/<2F>!<21>*<<3C>%=<3D>><3E><08><1D>e<EFBFBD>_<EFBFBD>Q<EFBFBD>%7<>8<><0E> <<3C> <0C><19><13>o<EFBFBD><1D><15><11><1A>4<><03><18><13>o<EFBFBD><1D> <16>h<EFBFBD><13>e<EFBFBD> <0C> -<2D>2<><03><18><13>o<EFBFBD><1D>
<EFBFBD> 3<>
<16><19><17>(<28> +<2B>F<EFBFBD>9?<3F> ?<3F>u<EFBFBD> #<23>E<EFBFBD> *<2A> ?<3F>?<3F><> ?s<00>>Gc<01><><00><02><03>t|t<00>r|n|f<01>t|t<00>r|n|f<01>t<00><02>fd<01>tt <00><03><00>D<00><00>S)zJ
Uses 1-norm distance to calculate difference between two values.
c3<01>F<00>K<00>|]}t<00>|<00>|z
<00><00><01><00>y<00>wr;)<01>abs)rgr<><00>first<73>seconds <20><>r/rjz_color_diff.<locals>.<genexpr> s#<00><><00><><00>E<>Q<EFBFBD>s<EFBFBD>5<EFBFBD><11>8<EFBFBD>f<EFBFBD>Q<EFBFBD>i<EFBFBD>'<27>(<28>E<>s<00>!)r<r?<00>sumr|r})<04>color1<72>color2r*r+s @@r/rrsC<00><><00> !<21><16><15>/<2F>F<EFBFBD>f<EFBFBD>Y<EFBFBD>E<EFBFBD>!<21>&<26>%<25>0<>V<EFBFBD>v<EFBFBD>i<EFBFBD>F<EFBFBD> <0E>E<>%<25><03>F<EFBFBD> <0B>2D<32>E<> E<>Er1r;)r%r<>r!r<>ryr)r%zImage.Image | Noneryz)tuple[ImageDraw2.Draw | None, ModuleType]r) rr<>rEztuple[int, int]r<00>float | tuple[int, ...]r zfloat | tuple[int, ...] | Noner
rxryr<>)r<>r<>r<>r<>r<>rxryzlist[tuple[float, float]])r-r/r.r/ryrx)!<21>
__future__rrdr<><00>collections.abcr<00>typingrr4rrr <00> TYPE_CHECKINGr
<00>typesr r r rr<00>_typingrrr&rQrr<>rr<>r<>rr<>rr<>r1r/<00><module>r6s<><00><01>@#<23> <0B> <0A>$<24><17>*<2A>*<2A><15> <0A><10>(<28> <20>"<22>'<27>%<25>.3<EFBFBD>Z<EFBFBD>Z<EFBFBD>-?<3F>-?<3F><07> *<2A>?<3F><04>c 
<EFBFBD>c 
<EFBFBD>L#<23>"<1C>.2<EFBFBD><15> ><18> <16>><18><17>><18> #<23>><18> +<2B> ><18>
<12> ><18> 
<EFBFBD> ><18>B@<01>6<>@<01>AD<41>@<01>PU<50>@<01><1E>@<01>D F<01> #<23> F<01>-D<> F<01>
<EFBFBD> Fr1