Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
ImageDraw.cpython-313.pyc350 linesDownload Raw Back to __pycache__
1�

2v�j����h�%SSKJr SSKrSSKrSSKJr SSKJr SSKJ	r	J3r4Jr Sr\(a$SSKJ
r
 SS	KJr SS5KJrJr SSKJrJr SSKJrJr \	R.R0rS
\S'"SS5rSSSjjrSSSjjrSSSjjrSSjrSSjr g)�)�annotationsN)�Sequence)�cast�)�Image�6ImageColor�	ImageTextF)�Callable)�7ModuleType)�Any�AnyStr)�8ImageDraw2�	ImageFont)�Coords�_Inkz!Callable[[], Image.core._Outline]�Outlinec� �\rSrSr%SrS\S'SSSjjrS SjrS!SjrSS"Sjjr	S#S$S	jjr9SS%S10jjrS&S'SjjrS&S(Sjjr
S&S)S
jjrS*S+SjjrS,S-SjjrS&S'SjjrSS.SjjrS&S(SjjrS/S0SjjrS&S(SjjrS/SS.S1SjjjrS2S3SjjrS2SS.S4SjjjrS5SS.S6SjjjrS7SS.S8SjjjrS7SS.S8SjjjrSrg)9�	ImageDraw�=N�NImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None�fontc�L�UR5 SnUcURnX!R:wa&US:XaURS:XaSnO
Sn[U5eUS:XaURUlOSUlXlUR11Ul[RRUR12U5UlX lUS;a!URRS5Ul13O URRS	5Ul14US15;aSUlOSUlS
Ulg)aX16Create a drawing instance.17 18:param im: The image to draw in.19:param mode: Optional mode to use for color values.  For RGB20   images, this argument can be RGB or RGBA (to blend the21   drawing into the image).  For all other modes, this argument22   must be the same as the image mode.  If omitted, the mode23   defaults to the mode of the image.24rN�RGBA�RGBrz
mode mismatch�P)�I�F�����)�1rrrr�LF)
�_ensure_mutable�mode�25ValueError�palette�_image�imr�core�draw�draw_ink�ink�fontmode�fill)�selfr&r"�blend�msgs     �SD:\code\apps\devtools\python\user_packages\Python313\site-packages\PIL/ImageDraw.py�__init__�ImageDraw.__init__Bs���	�������<��7�7�D��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�t�UR(dSSKJn UR"5UlUR$)a�26Get the current default font.27 28To set the default font for this ImageDraw instance::29 30    from PIL import ImageDraw, ImageFont31    draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")32 33To set the default font for all future ImageDraw instances::34 35    from PIL import ImageDraw, ImageFont36    ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")37 38If the current default font is ``None``,39it is initialized with ``ImageFont.load_default()``.40 41:returns: An image font.r�r)r�r�load_default)r-rs  r0�getfont�ImageDraw.getfontjs(��(�y�y�#�!�.�.�0�D�I��y�y�r3c�X�UbSSKJn UR"U5$UR5$)Nrr5)r6rr7r8)r-�	font_sizers   r0�_getfont�ImageDraw._getfont�s*��� �#��)�)�)�4�4��<�<�>�!r3c���SnSnUc3Uc0UR(aURnX44$URnX44$Ub�[U[5(a [R42"XR5nUR(a:[U[5(a%URRXR5nURRU5nUb�[U[5(a [R43"X R5nUR(a:[U[5(a%URRX R5nURRU5nX44$�N)r,r*�44isinstance�strr�getcolorr"r$�tupler%r(r))r-r*r,�45result_ink�result_fills     r0�_getink�ImageDraw._getink�s���46����;�4�<��y�y�"�h�h�� �&�&�"�X�X�47��&�&����c�3�'�'�$�-�-�c�9�9�=�C��<�<�J�s�E�$:�$:��,�,�/�/��[�[�A�C�!�Y�Y�/�/��4�48����d�C�(�(�%�.�.�t�Y�Y�?�D��<�<�J�t�U�$;�$;��<�<�0�0��{�{�C�D�"�i�i�0�0��6���&�&r3c�l�URU5updUbURRXX6U5 gg)zDraw an arc.N)rFr(�draw_arc)r-�xy�start�endr,�widthr*s       r0�arc�
ImageDraw.arc�s4���L�L��&�	���?��I�I���r�#�E�:�r3c��UR5 URU5upCUcUnUb'URRXRU5 gg)zDraw a bitmap.N)�loadrFr(�draw_bitmapr&)r-rJ�bitmapr,r*s     r0rS�ImageDraw.bitmap�sI��	���
��L�L��&�	���;��C��?��I�I�!�!�"�i�i��5�r3c���URXT5upxUbURRXX8S5 Ub,Xx:wa&US:waURRXX7SU5 gggg)z
Draw a chord.Nrr)rFr(�49draw_chord�	r-rJrKrLr,�outlinerMr*�fill_inks	         r0�chord�ImageDraw.chord�s`�����W�3�
�����I�I� � ��C�1�=��?�s��5�A�:��I�I� � ��C�a��?�4>��?r3c���URX25upVUbURRXS5 Ub+XV:wa%US:waURRXSU5 gggg)zDraw an ellipse.Nrr)rFr(�draw_ellipse�r-rJr,rXrMr*rYs       r0�ellipse�ImageDraw.ellipse�s\�����W�3�
�����I�I�"�"�2��3��?�s��5�A�:��I�I�"�"�2�A�u�5�4>��?r3c�d�USU-50USU-51USU-USU-4nURXcXE5 g)z4Draw a circle given center coordinates and a radius.rrN)r_)r-rJ�radiusr,rXrM�52ellipse_xys       r0�circle�ImageDraw.circle�s@����e�f�n�b��e�f�n�b��e�f�n�b��e�f�n�U�53����Z�w�6r3c
�.^�URU5SnUGbqURRXT5 US:XGaMTS:�GaE[US[[5445(a[
[[[U5nOI[S[U5S5Vs/sH(n[
[[[XUS-55PM* nn[S[U5S-555GH�nXgnXgS-56U4X�US-44V	V57s/sHEup�[R"[R"U58SU	S-59U	SU60S-6155S-PMG nn	n62USUS:XaMzSU4SjjnUSUS:�=(a USS	-63US:�=(d  USUS:=(a USS	-US:�n
USTS--64S-USTS--65S-4USTS--S-66USTS--S-674/nU
(aUSS68-USS69-p�OUSS70-71USS72-73p�URX�S74-75U76S77-78U5 TS:�dGMOU
(aU"X�SS79-5UU"X�SS80-5/nOU"X�SS81-825UU"X�SS83-845/nURX�SS
9 GM� ggggs snfs sn85n	f)z6Draw a line, or a connected sequence of line segments.rN�curve��r�hc��>�Uup#US-nTS-S-86n[SX$[R"[R"U55-4X4[R"[R"U55-4455$)N�Zrirc3�# �UH;upXS:�a[R"U5O[R"U5-v� M= g7f)rN)�math�floor�ceil)�.0�p�p_ds   r0�	<genexpr>�9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>s8���%�+����!�G����C�����3��P�+�s�AA)rCrn�cos�radians�sin)�coord�angle�x�y�distancerMs     �r0�coord_at_angle�&ImageDraw.line.<locals>.coord_at_anglesz��� %�������#(�1�9�q�=��$�%�"#�t�x�x����U�8K�/L�$L� M�!"�t�x�x����U�8K�/L�$L� M�+�%� �r3�rl��)rM)ry�Sequence[float]rz�float�returnztuple[float, ...])rFr(�87draw_linesr@�listrCrrr��range�lenrn�degrees�atan2�pieslice�line)r-rJr,rM�jointr*�points�i�pointrKrL�anglesr~�flipped�coords�88gap_coordss   `            r0r��ImageDraw.line�s����l�l�4� ��#���?��I�I� � ��%�0����E�A�I��b��e�d�E�]�3�3�!�(�8�E�?�";�R�@�F�"'�q�#�b�'�1�!5��!5�A��X�e�_�e�B�1�q�5�M�.B�C�!5����q�#�f�+��/�2�A�"�I�E�89$��E�]�E�2�"�1�q�5�M�2�+��+�J�E����T�Z�Z��A���q��0A�5��8�c�RS�f�CT�%U�V���+����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�Q�i�"�n� E� %� .�u�Q�i�"�n� E�*�J�!/�u�Q�i�"�n� E� %� .�u�Q�i�"�n� E�*�J�90�	�	�*�!�	�<�o3�%.������s
�/J�?AJc���UR5 URX25upEUbURRXS5 Ub#XE:waURRXS5 ggg)z(Experimental) Draw a shape.Nrr)�closerFr(�draw_outline)r-�shaper,rXr*rYs      r0r��ImageDraw.shape7s[��	���
����W�3�
�����I�I�"�"�5�A�6��?�s���I�I�"�"�5�q�1� /�?r3c���URXT5upxUbURRXX8S5 Ub,Xx:wa&US:waURRXX7SU5 gggg)zDraw a pieslice.Nrr)rFr(�
draw_pieslicerWs	         r0r��ImageDraw.piesliceEs`�����W�3�
�����I�I�#�#�B�s�a�@��?�s��5�A�:��I�I�#�#�B�s��E�B�4>��?r3c�h�URU5up2UbURRX5 gg)z#Draw one or more individual pixels.N)rFr(�draw_points)r-rJr,r*s    r0r��ImageDraw.pointUs.���L�L��&�	���?��I�I�!�!�"�*�r3c��URX25upVUbURRXS5 Ub�XV:wa�US:wa�US:XaURRXSU5 gURb�[R91"SURR5nURS5Sn[U5n	U	RRXS5 URRXSUS-S-92UR5 ggggg)zDraw a polygon.Nrrrri)rFr(�draw_polygonr&r�new�size�Draw)93r-rJr,rXrMr*rY�mask�mask_inkr(s94          r0�polygon�ImageDraw.polygon[s������W�3�
�����I�I�"�"�2��3��?�s��5�A�:���z��	�	�&�&�r��5�9����$��y�y��d�g�g�l�l�3���<�<��?�1�-���D�z���	�	�&�&�r�Q�7��	�	�&�&�r��5�1�9�q�=�$�'�'�J�%�4>��?r3c�@�[XU5nURXtXV5 g)zDraw a regular polygon.N)�!_compute_regular_polygon_verticesr�)r-�bounding_circle�n_sides�rotationr,rXrMrJs        r0�regular_polygon�ImageDraw.regular_polygonss��/���
R�����R�w�.r3c���URX25upVUbURRXS5 Ub+XV:wa%US:waURRXSU5 gggg)zDraw a rectangle.Nrr)rFr(�draw_rectangler^s       r0�	rectangle�ImageDraw.rectangle�s\�����W�3�
�����I�I�$�$�R�1�5��?�s��5�A�:��I�I�$�$�R�a��7�4>��?r3)�cornersc
��^^^^^^^^^^^^�[US[[45(a([[[[95U5uummummO[[[96U5ummmmTT:a
Sn[
U5eTT:a
Sn[
U5eTcSmUS-m[T5m[T5m[T5m[T5mSumm[T5(aOTTT-97S-98:�mT(aTT-99mTTT-100S-101:�mT(aTT-102mT(aT(aTRXUT5$TS:Xd[T5(dTRXUT5$[TS-5nTRXC5ummS
UUUUUUUUUUUU4S	jjn	TGb>U	"S1035 T(a.TRRTTU-S-TTU-104S-1054TS5 O?TU-106S-107TU-S-:�a-TRRTU-S-TTU-108S-109T4TS5 T(d�T(d�TTTU-T/n110TS(aU111S==US--
ss'TS(aU112S==US--ss'TRRU113TS5 TU-114TTT/nTS(aUS==US--
ss'TS(aUS==US--ss'TRRUTS5 TGb�TT:wGa�TS:wGa�U	"S5 T(d�TTTTT-S-115/nTS(aUS==US--
ss'TS(aUS==US--ss'TRRUTS5 TTT-116S-TT/n
TS(aU
S==US--
ss'TS(aU
S==US--ss'TRRU
TS5 T(d�TTTT-S-117T/n118TS(aU119S==US--
ss'TS(aU120S==US--ss'TRRU121TS5 TT-122S-TTT/nTS(aUS==US--
ss'TS(aUS==US--ss'TRRUTS5 ggggg)zDraw a rounded rectangle.rz&x1 must be greater than or equal to x0z&y1 must be greater than or equal to y0N)TTTTri)FFrc��>�T(aTT
TT-T
T-4SS4TTT-123TT-T4SS44nO|T(aTT
TT-T
T-4SS4TT-124T
TT
T-4SS44nOV[U4Sj[TT
TT-T
T-4SS4TT-125T
TT
T-4SS4TT-126TT-127TT4SS4TTT-128TT-T4SS44555nUHHnU(a T	RR"UTS4-6 M*T	RR"UTT1294-6 MJ g)Nr�rjrrl�c3�D># �UHupTU(dMUv� M g7fr?�)rqr��partr�s   �r0rt�DImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>�s)�����$����q�z��D�$�s� �	 r)rC�	enumerater(r�rI)r��partsr�r��drY�full_x�full_yr*r-rM�x0�x1�y0�y1s   ������������r0�draw_corners�1ImageDraw.rounded_rectangle.<locals>.draw_corners�s]�����"�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�?�	�$��������I�I�+�+�d�h��]�.B�D��I�I�&�&���e��)<�>�	r3Tr�F)r��boolr��None)r@r�rCrrr�r#�round�allr_�anyr��intrFr(r�)r-rJrbr,rXrMr�r/�rr��left�right�top�bottomr�rYr�r�r*r�r�r�r�s`    ``       @@@@@@@@@r0�rounded_rectangle�ImageDraw.rounded_rectangle�sX�����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����>�>�"�G�U�;�;���Q��K�����W�3�
��X� 	?� 	?� 	?�D�������	�	�(�(�"�b�1�f�q�j�"�b�1�f�q�j�)I�8�UV�W��a��!��r�A�v��z�)��	�	�(�(�"�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�130�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>��?r3c�^^^	^131^
^^^^�[U[R5(aUmOwUc TRTR	S55n[R"X$TR132UTT	T1335mT
(aTR
5 U(aTRX�5 SU4SjjnU"U5nUcgSnTR(a!TRbU"TR5OUnTRXU5HEmSSUUU
U	UUU134UU4	SjjjnUb%U"UTR5 UU:wa135U"U5 M;M=U"U5 MG g)z136Draw text.Nr;c�B>�TRU5upUcUceU$U$r?)rF)r,r*rYr-s   �r0�getink�ImageDraw.text.<locals>.getink?s.��� �L�L��.�M�C��{��+�+�+����Jr3c�>	�TRnUS:Xa	T(aSn[TR5n[TR5n[R137"TR5S[R138"TR5S4nTRR"TRU/T139Q7TT
TUSTRUUS.TD6upgX7S-
nXGS-
nUS:Xa�XfRS5ph[R"SU5Sn	UR!SU	5 TR"b?TR"R%X�XCUR&S-XFR&S-4U5 ggTR(R+X44X`5 g![ax TRR"TRUTT
TUTRU/T140Q7SU0TD6nN�![a* TRRTR5nGN+f=ff=f)	NrrT)�	direction�features�language�stroke_width�
stroke_filled�anchorr*rKrrKr�r�)r+r�r{r|rn�modfr�getmask2�textr��AttributeError�getmask�	TypeError�getband�struct�pack�fillbandr&�paster�r(rR)r*r�r"r{r|rKr��offset�color�	ink_alpha�argsr��embedded_colorr��141image_text�kwargsr�r�r-s          ���������r0�	draw_text�!ImageDraw.text.<locals>.draw_textTs����}�}���1�$��!�D�����K������K�����4�6�6�*�1�-�t�y�y����/@��/C�D��!B�#-�?�?�#;�#;��	�	��
$��
$�#,�!)�!)�%1�&*�#�{�{��#�
$�!�
$�L�D����N�A����N�A�$�6�>�#'���Q��4� &���C�� 5�a� 8�I��N�N�1�i�0��w�w�*����
�
�!�q�d�i�i��l�*:�A�	�	�!��<L�#M�t��+�142�I�I�)�)�1�&�$�<��;&�B�B�)���6�6� �I�I� �%�$�$�(� �K�K�� �"� �#(� �%� ���%�B�)���6�6�t�y�y�A��B��B�s+�AF143�144 145H�=G�/H�H�H�H)r,�_Ink | Noner�r�)r)r*r�r�r�r�r�)r@r	�Textr<�getr"�embed_color�stroker��stroke_fill�_split)r-rJr�r,rr��spacing�alignr�r�r�r�r�r�r�r�r�r*�146stroke_inkr�r�r�s`       ```  ```    @@r0r��ImageDraw.texts&����0�d�I�N�N�+�+��J��|��}�}�V�Z�Z��%<�=��"����D�I�I�w�	�8�X��J���&�&�(���!�!�,�<�	��T�l���;���147��"�"��)�)�5��z�-�-�.��
��%�%�b�%�8�D�5
=�5
=�5
=�n�%��*�j�&=�&=�>��*�$��c�N�%��#��E9r3�r;c�:�URUUUUUUUUU	U148UUU
US9$�Nr)r�)r-rJr�r,rr�r�r�r�r�r�r�r�r�r;s               r0�multiline_text�ImageDraw.multiline_text�sD��.�y�y����������������149�	150r3c	��UcURU5n[R"UUURUUUS9nU(aUR	5 UR5$)z@Get the length of a given string, in pixels with 1/64 precision.)r�r�r�)r<r	r�r"r��151get_length)	r-r�rr�r�r�r�r;r�s	         r0�152textlength�ImageDraw.textlength�s[��"�<��=�=��+�D��^�^����I�I����
153�154���"�"�$��$�$�&�&r3c	���UcURU5n[R"X#URXWX�5n
U(aU
R	5 U155(aU
RU1565 U
R
XU5$)z2Get the bounding box of a given string, in pixels.)r<r	r�r"r�r��get_bbox)r-rJr�rr�r�r�r�r�r�r�r�r;r�s              r0�textbbox�ImageDraw.textbbox�sg��,�<��=�=��+�D��^�^���	�	�7�x�157�158���"�"�$�����l�+��"�"�2�u�5�5r3c�6�URUUUUUUUUU	U159UUS9$r)r)
r-rJr�rr�r�r�r�r�r�r�r�r;s
             r0�multiline_textbbox�ImageDraw.multiline_textbbox�s>��*�}�}��������������
160�
	161r3)	r%r(r,rr+r&r*r"r$r?)r&�Image.Imager"�162str | Noner�r�)r��GImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r;�float | Noner�r)r*r�r,r�r�ztuple[int | None, int | None])Nr)rJrrKr�rLr�r,r�rMr�r�r�)rJz
Sequence[int]rSrr,r�r�r�)NNr)rJrrKr�rLr�r,r�rXr�rMr�r�r�)163rJrr,r�rXr�rMr�r�r�)rJr�rbr�r,r�rXr�rMr�r�r�)NrN)164rJrr,r�rMr�r�rr�r�)NN)r�zImage.core._Outliner,r�rXr�r�r�)rJrr,r�r�r�)rNNr)r��!Sequence[Sequence[float] | float]r�r�r�r�r,r�rXr�rMr�r�r�)rJrrbr�r,r�rXr�rMr�r�z$tuple[bool, bool, bool, bool] | Noner�r�)NNNrhr�NNNrNF) rJ�tuple[float, float]r�zAnyStr | ImageText.Text[AnyStr]r,r�rrr�rr�r�r�rAr�rr��list[str] | Noner�rr�r�r�r�r�r�r�rr�rr�r�)rJrr�r
r,r�rrr�rr�r�r�rAr�rr�rr�rr�r�r�r�r�r�r;rr�r�)NNNNF)r�r
rrr�rr�rr�rr�r�r;rr�r�)	NNrhr�NNNrF)rJrr�r
rrr�rr�r�r�rAr�rr�rr�rr�r�r�r�r;rr�z!tuple[float, float, float, float])�__name__�165__module__�__qualname__�__firstlineno__r�__annotations__r1r8r<rFrNrSrZr_rdr�r�r�r�r�r�r�r�r�rrrr�__static_attributes__r�r3r0rr=sJ��	
�	�V�
�&�P�	P��6"�%�"�	P�"�59�'��'�&1�'�	&�'�<!��
;��;��;��	;�166�;��
;�167�;�KO�	6��	6�)4�	6�<G�	6�	
�	6� !�#��@��@��@��	@�168�@��
@��@�169�@�&!�#��6��6��6��	6�170�6�171�
6�$!�#��
1727��1737��1747��	1757�176�1777��
1787�179�1807�!�� �K=��K=��K=��	K=�181�K=�182�
K=�`!�#�	2�"�2��2��	2�183184�2�&!�#��C��C��C��	C�185�C��
C��C�186�C� +�!�#��K��K��K��	K�187�K�188�
K�8� �#��/�:�/��/��	/�189�/��
/��/�190�/� !�#��8��8��8��	8�191�8�192�
8�"� �#��
J8�9=�J8��J8��J8��	J8�193�J8��
J8�6�J8�194�J8�`!�
�!��� $�%)�#��#'�$�'z��z�.�z��	z�
�
z��z��z��z��z�#�z� �!z�"�#z�$!�%z�&�'z�(�)z�*�+z�,195�-z�@!�
�!��� $�%)�#��#'�$�'&196�*#'�+&197��&198��&199��	&200�
�
&201��&202��&203��&204��&205�#�&206� �!&207�"�#&208�$!�%&209�&�'&210�* �+&211�,212�-&213�`
� $�%)�#�$�'�#'�'��'�
�	'��'�#�'��'��'� �'�214�'�P
�!��� $�%)�#��$�#6�&#'�'6��6��6�215
�6��6��6��6��6�#�6��6� �!6�"�#6�& �'6�(216+�)6�T
�!��� $�%)�#��$�#"217�&#'�'"218��"219��"220�221
�"222��"223��"224��"225��"226�#�"227��"228� �!"229�"�#"230�& �'"231�(232+�)"233�"234r3rc�^�[US5"U5$![a [X5s$f=f)ak235A simple 2D drawing interface for PIL images.236 237:param im: The image to draw in.238:param mode: Optional mode to use for color values.  For RGB239   images, this argument can be RGB or RGBA (to blend the240   drawing into the image).  For all other modes, this argument241   must be the same as the image mode.  If omitted, the mode242   defaults to the mode of the image.243�getdraw)�getattrr�r)r&r"s  r0r�r�#s3��#��r�9�%�d�+�+���#���"�"�#�s��,�,c�B�SSKJn UbUR"U5OSnX!4$)za244:param im: The image to draw in.245:returns: A (drawing context, drawing resource factory) tuple.246r)rN)r6rr�)r&rr(s   r0rr4s$��247�"$�.�:�?�?�2��d�D���r3c�F�UR5nUceUupgXVU4n[X(5U::agX%Xg4'Xg41n	[	5n248U	(a�[	5nU	H�upgUS-U4US-249U4XgS-4XgS-25044Hkup�X�4U251;dUS:dU
S:aMX\U
4nU252RX�45 Uc[X�5U:*nOX�U4;nU(aX%X�4'URX�45 MkMm M� U	n253Un	U	(aM�gg![[4a gf=f![[4a M�f=f)a�254.. warning:: This method is experimental.255 256Fills a bounded region with a given color.257 258:param image: Target image.259:param xy: Seed position (a 2-item coordinate tuple). See260    :ref:`coordinate-system`.261:param value: Fill color.262:param border: Optional border value.  If given, the region consists of263    pixels with a color different from the border color.  If not given,264    the region consists of pixels having the same color as the seed265    pixel.266:param thresh: Optional threshold value which specifies a maximum267    tolerable difference of a pixel value from the 'background' in268    order for it to be replaced. Useful for filling regions of269    non-homogeneous, but similar, colors.270Nrr)rQ�_color_diffr#�271IndexError�set�add)�imagerJ�value�border�thresh�pixelr{r|�272background�edge�	full_edge�new_edge�s�trrr,s                r0�	floodfillr1?sc��6
�J�J�L�E�����
�D�A���a�4�[�273��u�)�V�3���a�d���F�8�D���I�274��5���D�A��a�%���a�!�e�Q�Z�!��U��a�Q��Z�H����6�Y�&�!�a�%�1�q�5��-���d��A��M�M�1�&�)��~�*�1�9�V�C�� ���7���&+�a�d�� ���a�V�,��I��$�	���+�$��

�275�#�����#�J�/����s(�C6�C6�D�6D	�D	�D �D c�^^	^276�[U[5(d
Sn[U5eUS:a
Sn[U5e[U[[27745(d
Sn[U5e[
U5S:XaH[SU55(d
Sn[U5e[[[[	U55Gtm	m278O�[
U5S:Xa�[US[[27945(a�[S	US55(a[US280[[45(d
Sn[U5e[
US5S:wa
Sn[U5e[[[[	US55m	[[US2815m282O
Sn[U5eT283S::a
S
n[U5e[U[[45(d
Sn[U5eSU	4SjjmSUU2844SjjnSSjnU"X5nUVs/sH285ot"U5PM sn$s snf)u286Generate a list of vertices for a 2D regular polygon.287 288:param bounding_circle: The bounding circle is a sequence defined289    by a point and radius. The polygon is inscribed in this circle.290    (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``)291:param n_sides: Number of sides292    (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon)293:param rotation: Apply an arbitrary rotation to the polygon294    (e.g. ``rotation=90``, applies a 90 degree rotation)295:return: List of regular polygon vertices296    (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``)297 298How are the vertices computed?2991. Compute the following variables300    - theta: Angle between the apothem & the nearest polygon vertex301    - side_length: Length of each polygon edge302    - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle)303    - polygon_radius: Polygon radius (last element of bounding_circle)304    - angles: Location of each polygon vertex in polar grid305        (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0])306 3072. For each angle in angles, get the polygon vertex at that angle308    The vertex is computed using the equation below.309        X= xcos(φ) + ysin(φ)310        Y= −xsin(φ) + ycos(φ)311 312    Note:313        φ = angle in degrees314        x = 0315        y = polygon_radius316 317    The formula above assumes rotation around the origin.318    In our case, we are rotating around the centroid.319    To account for this, we use the formula below320        X = xcos(φ) + ysin(φ) + centroid_x321        Y = −xsin(φ) + ycos(φ) + centroid_y322zn_sides should be an intr�zn_sides should be an int > 2z$bounding_circle should be a sequencec3�N# �UHn[U[[45v� M g7fr?�r@r�r��rqr�s  r0rt�4_compute_regular_polygon_vertices.<locals>.<genexpr>�s���H��1�:�a�#�u��.�.����#%z0bounding_circle should only contain numeric datarirc3�N# �UHn[U[[45v� M g7fr?r4r5s  r0rtr6�s"���323�1C�A�J�q�3��,�'�'�1C�r7rzBbounding_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��>�[US[R"[R"SU-32455-US[R"[R"SU-32555--326TS-S5[US[R"[R"SU-32755-US[R"[R"SU-32855--TS-S54$)Nrrjrri)r�rnrvrwrx)r�r��centroids  �r0�_apply_rotation�:_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�+���	
�
329�
	330r3c�>�TS/nT"X5$�Nrr�)rz�start_pointr;�polygon_radiuss  ��r0�_compute_polygon_vertex�B_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex�s���%�q�)���{�2�2r3c��/nSU-nSSU--331U-n[U5H%nURU5 XC-
nUS:�dM US-nM' U$)Nrjr�g�?)r��append)r�r�r�r��
current_angle�_s      r0�_get_angles�6_compute_regular_polygon_vertices.<locals>._get_angles�s^������-���s�W�}�,��8�
��w��A��M�M�-�(��$�M��s�"���$�
�	 �332�
r3)r��list[float]r�r�r�r)rzr�r�r)r�r�r�r�r�rI)333r@r�r�r#r�rCr�r�rr�)r�r�r�r/rArGr�rzr;r:r@s        @@@r0r�r��s����V�g�s�#�#�(����n����{�,����o���o��e�}�5�5�4����n��334�?��q� ��H��H�H�H�D�C��S�/�!�$(��e��d�?�6K�$L�!��>�	�_�	��	"�z�/�!�2D�t�U�m�'T�'T��335�1@��1C�336�337�338��O�A�.��e��=�=�D�C��S�/�!���q�!�"�a�'�V�C��S�/�!���U��T�/�!�*<�%=�>���e�_�Q�%7�8��
<�	���o�����4����o���h��e��-�-�2����o��339� 3�3�340���
+�F�9?�?��u�#�E�*��?�?��?s�*G>c�^^�[U[5(aUOU4m[U[5(aUOU4m[UU4Sj[[	T5555$)zB341Uses 1-norm distance to calculate difference between two values.342c3�L># �UHn[TUTU-3435v� M g7fr?)�abs)rqr��first�seconds  ��r0rt�_color_diff.<locals>.<genexpr>s(����E�2D�Q�s�5��8�f�Q�i�'�(�(�2D�s�!$)r@rC�sumr�r�)�color1�color2rMrNs  @@r0r"r"sI���!���/�/�F�f�Y�E�!�&�%�0�0�V�v�i�F��E�%��F��2D�E�E�Er3r?)r&rr"rr�r)r&zImage.Image | Noner�z)tuple[ImageDraw2.Draw | None, ModuleType]r>)r&rrJztuple[int, int]r'�float | tuple[int, ...]r(zfloat | tuple[int, ...] | Noner)r�r�r�)r�rr�r�r�r�r�zlist[tuple[float, float]])rQrSrRrSr�r�)!�344__future__rrnr��collections.abcr�typingrr6rrr	�
TYPE_CHECKINGr345�typesrrr
rr�_typingrrr'rXrrrr�rr1r�r"r�r3r0�<module>rZs���@#��
�$��*�*��
��(� �"�'�%�.3�Z�Z�-?�-?��	*�?��c346�c347�L#�"�.2��>��>��>�#�>�
+�	>�348
�>�349�
>�B@�6�@�AD�@�PU�@��@�D	F�#�	F�-D�	F�350�	Fr3
codekingpro/portable-devtools · Team Ai