§
    2?Äj .  ã                   óª   — d Z ddlZddlZddlmZmZmZ  ej        e	¦  «        Z
dZ G d„ de¦  «        Z G d„ de¦  «        Zd	„ Z G d
„ d¦  «        ZdS )z"
PIL formats for multiple images.
é    Né   )ÚPillowFormatÚimage_as_uintÚndarray_to_pilc                   ó   — e Zd ZdZdZdS )Ú
TIFFFormatÚizTIFF format (Pillow)N)Ú__name__Ú
__module__Ú__qualname__Ú_modesÚ_description© ó    úLC:\Projects\Historical\venv\Lib\site-packages\imageio/plugins/pillowmulti.pyr   r      s   € € € € € Ø€FØ)€L€L€Lr   r   c                   ó@   — e Zd ZdZdZdZ G d„ dej        ¦  «        ZdS )Ú	GIFFormatz(See :mod:`imageio.plugins.pillow_legacy`ÚiIz Static and animated gif (Pillow)c                   ó.   — e Zd Z	 	 	 	 	 	 d	d„Zd„ Zd„ ZdS )
úGIFFormat.Writerr   Né
   é   Fc           	      ón  — ddl m} t          d„ |                     d¦  «        D ¦   «         ¦  «        \  }}	}
|dk    r|	dk    rt	          d|› d�¦  «        ‚t          |¦  «        }|d	k     s|d
k    rt          d¦  «        ‚|dvrDd	t          t          j        d¦  «        dz   ¦  «        z  }t           
                    d|z  ¦  «         |€dt          |¦  «        z  | _        nBt          |t          t          f¦  «        rd„ |D ¦   «         | _        nt          |¦  «        | _        t          |¦  «        }|dk    s|t          d¦  «        k    rd}t          |¦  «        }t          |¦  «        }|rdnd	| _        | j                             ¦   «         }t'          ||||t          |¦  «        ¦  «        | _        d S )Nr   )Ú__version__c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Úint)Ú.0Úxs     r   ú	<genexpr>z)GIFFormat.Writer._open.<locals>.<genexpr>)   s(   è è € Ð'RÐ'R°1­¨A©¬Ð'RÐ'RÐ'RÐ'RÐ'RÐ'Rr   ú.r   r   zPillow vzŽ is not supported by ImageIO's legacy pillow plugin when writing GIFs. Consider switching to the new plugin or downgrading to `pillow<10.1.0`.é   r   z!GIF quantize param must be 2..256)r"   é   é   é   é    é@   é€   r   r(   g+‡ÙÎ÷ï?zDWarning: palettesize (%r) modified to a factor of two between 2-256.g      ð?c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úfloat)r   Úds     r   ú
<listcomp>z*GIFFormat.Writer._open.<locals>.<listcomp>?   s   € Ð!=Ð!=Ð!=¨q¥%¨¡(¤(Ð!=Ð!=Ð!=r   Úinf)ÚPILr   ÚtupleÚsplitÚImportErrorr   Ú
ValueErrorÚnpÚlog2ÚloggerÚwarningr*   Ú	_durationÚ
isinstanceÚlistÚboolÚ_disposeÚrequestÚget_fileÚ	GifWriterÚ_writer)ÚselfÚloopÚdurationÚfpsÚpalettesizeÚ	quantizerÚsubrectanglesÚpillow_versionÚmajorÚminorÚpatchÚfps               r   Ú_openzGIFFormat.Writer._open   sç  € ð :Ð9Ð9Ð9Ð9Ð9å"'Ð'RÐ'R¸×8LÒ8LÈSÑ8QÔ8QÐ'RÑ'RÔ'RÑ"RÔ"RÑˆE�5˜%Ø˜Š{ˆ{˜u¨šz˜zÝ!ð@˜~ð @ð @ð @ñô ð õ ˜kÑ*Ô*ˆKØ˜QŠˆ +°Ò"3Ð"3Ý Ð!DÑEÔEÐEØÐ"AÐAÐAØ¥3¥r¤w¨s¡|¤|°eÑ';Ñ#<Ô#<Ñ<�Ý—’ð)Ø+6ñ7ñô ð ð
 ÐØ!$¥u¨S¡z¤zÑ!1�”�Ý˜H¥t­U mÑ4Ô4ð 1Ø!=Ð!=°HÐ!=Ñ!=Ô!=�”�å!& x¡¤�”å˜‘;”;ˆDØ�qŠyˆy˜D¥E¨%¡L¤LÒ0Ð0Ø�Ý�t‘9”9ˆDå  Ñ/Ô/ˆMØ!.Ð5˜A˜A°AˆDŒMð ”×&Ò&Ñ(Ô(ˆBÝ$Ø�M 4¨µC¸Ñ4DÔ4Dñô ˆDŒLˆLˆLr   c                 ó8   — | j                              ¦   «          d S r   )r?   Úclose©r@   s    r   Ú_closezGIFFormat.Writer._closeQ   s   € ØŒL×ÒÑ Ô Ð Ð Ð r   c                 ó\  — t          |d¬¦  «        }|j        dk    r |j        d         dk    r|d d …d d …df         }| j        }t	          |t
          ¦  «        r0|t          t          |¦  «        dz
  | j        j	        ¦  «                 }| j
        }| j                             |||¦  «         d S )Nr$   )Úbitdepthé   éÿÿÿÿr   r   )r   ÚndimÚshaper7   r8   r9   ÚminÚlenr?   Ú_countr;   Ú	add_image)r@   ÚimÚmetarB   Údisposes        r   Ú_append_datazGIFFormat.Writer._append_dataT   sª   € Ý˜r¨AÐ.Ñ.Ô.ˆBØŒw˜!Š|ˆ| ¤¨¤°Ò 1Ð 1Ø˜˜˜˜1˜1˜1˜a˜”[�Ø”~ˆHÝ˜(¥DÑ)Ô)ð QØ#¥C­¨H©¬¸Ñ(9¸4¼<Ô;NÑ$OÔ$OÔP�Ø”mˆGØŒL×"Ò" 2 x°Ñ9Ô9Ð9àˆFr   )r   Nr   r   r   F)r
   r   r   rL   rP   r^   r   r   r   ÚWriterr      s[   € € € € € ð ØØØØØð1	ð 1	ð 1	ð 1	ðf	!ð 	!ð 	!ð
	ð 
	ð 
	ð 
	ð 
	r   r_   N)r
   r   r   Ú__doc__r   r   r   r_   r   r   r   r   r      s[   € € € € € Ø2Ð2à€FØ5€LðAð Að Að Að A�Ô$ñ Aô Að Að Að Ar   r   c                 ó0   — |                       dd¬¦  «        S )Nr"   Úlittle)Ú	byteorder)Úto_bytes)r	   s    r   ÚintToBinre   a   s   € Ø�:Š:�a 8ˆ:Ñ,Ô,Ð,r   c                   ód   — e Zd ZdZ	 	 	 	 dd„Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	dd„Z
d„ Zdd„Zd„ Zdd„ZdS )r>   z³Class that for helping write the animated GIF file. This is based on
    code from images2gif.py (part of visvis). The version here is modified
    to allow streamed writing.
    Tr   r   c                 ó�   — || _         || _        || _        || _        || _        d | _        d | _        d| _        ddlm	} || _	        d S )Nr   )Úgetdata)
rK   Úopt_subrectangleÚopt_loopÚopt_quantizerÚopt_palette_sizeÚ_previous_imageÚ_global_paletterY   ÚPIL.GifImagePluginrh   )r@   Úfileri   rj   rk   rl   rh   s          r   Ú__init__zGifWriter.__init__k   s^   € ð ˆŒà 0ˆÔØ ˆŒØ*ˆÔØ 0ˆÔà#ˆÔØ#ˆÔØˆŒà.Ð.Ð.Ð.Ð.Ð.àˆŒˆˆr   c                 ó„  — |d}}| j         r|                      |¦  «        \  }}|                      || j        | j        ¦  «        }ddlm}  ||¦  «        d         d         }| j        dk    r#|                      ||| j	        ¦  «         || _
        |                      |||||¦  «         || _        | xj        dz  c_        d S )N©r   r   r   )Ú	getheaderrS   r   )ri   ÚgetSubRectangleÚconverToPILrk   rl   ro   rt   rY   Úwrite_headerrj   rn   Úwrite_imagerm   )	r@   r[   rB   r]   Úim_rectÚrectÚim_pilrt   Úpalettes	            r   rZ   zGifWriter.add_image‚   sâ   € à˜F�ˆØÔ ð 	5Ø ×0Ò0°Ñ4Ô4‰MˆG�TØ×!Ò! '¨4Ô+=¸tÔ?TÑUÔUˆð
 	1Ð0Ð0Ð0Ð0Ð0à�)˜FÑ#Ô# AÔ& qÔ)ˆð Œ;˜!ÒÐØ×Ò˜f g¨t¬}Ñ=Ô=Ð=Ø#*ˆDÔ Ø×Ò˜ ¨$°¸'ÑBÔBÐBð  "ˆÔØˆŒ�qÑˆŒˆˆr   c                 óö   — |                       |¦  «        }|                      |¦  «        }| j                             |¦  «         | j                             |¦  «         | j                             |¦  «         d S r   )ÚgetheaderAnimÚ	getAppExtrK   Úwrite)r@   r[   ÚglobalPaletterA   ÚheaderÚappexts         r   rw   zGifWriter.write_header›   sh   € à×#Ò# BÑ'Ô'ˆØ—’ Ñ%Ô%ˆàŒ�Š�fÑÔÐØŒ�Š�mÑ$Ô$Ð$ØŒ�Š�fÑÔÐÐÐr   c                 ó`   — | j                              d                     d¦  «        ¦  «         d S )Nú;úutf-8)rK   r€   ÚencoderO   s    r   rN   zGifWriter.close¤   s(   € ØŒ�Š�c—j’j Ñ)Ô)Ñ*Ô*Ð*Ð*Ð*r   c                 óœ  — | j         }|                      |¦  «        }d}|r@t          |¦  «        dk     r-||                     d¦  «        z  }|rt          |¦  «        dk     °-t          |¦  «        dk    sJ ‚|                      ||¦  «        }	|                      ||¦  «        }
|| j        k    s|dk    rU|                     |
¦  «         |                     |	¦  «         |                     |¦  «         |                     d¦  «         n*|                     |
¦  «         |                     |¦  «         |D ]}|                     |¦  «         Œd S )Nr   é   r   r"   ó   )rK   rh   rX   ÚpopÚgetImageDescriptorÚgetGraphicsControlExtrn   r€   )r@   r[   r|   rz   rB   r]   rK   ÚdataÚimdesÚlidÚgraphextr+   s               r   rx   zGifWriter.write_image§   sU  € ØŒWˆð �|Š|˜BÑÔˆØˆØð 	!•s˜5‘z”z B’�Ø�T—X’X˜a‘[”[Ñ ˆEð ð 	!•s˜5‘z”z B’�å�5‰zŒz˜RÒÐÐÐð ×%Ò% b¨$Ñ/Ô/ˆØ×-Ò-¨h¸Ñ@Ô@ˆð �tÔ+Ò+Ð+°¸A²°à�HŠH�XÑÔÐØ�HŠH�S‰MŒMˆMØ�HŠH�WÑÔÐØ�HŠH�WÑÔÐÐð �HŠH�XÑÔÐØ�HŠH�U‰OŒOˆOð ð 	ð 	ˆAØ�HŠH�Q‰KŒKˆKˆKð	ð 	r   c                 óˆ   — d}|t          |j        d         ¦  «        z  }|t          |j        d         ¦  «        z  }|dz  }|S )z4Get animation header. To replace PILs getheader()[0]s   GIF89ar   r   s   ‡  ©re   Úsize)r@   r[   Úbbs      r   r~   zGifWriter.getheaderAnimÈ   sF   € àˆØ
�h�r”w˜q”zÑ"Ô"Ñ"ˆØ
�h�r”w˜q”zÑ"Ô"Ñ"ˆØ
ˆoÑˆØˆ	r   Nc                 óð   — |€d}d}|t          |d         ¦  «        z  }|t          |d         ¦  «        z  }|t          |j        d         ¦  «        z  }|t          |j        d         ¦  «        z  }|dz  }|S )a‹  Used for the local color table properties per image.
        Otherwise global color table applies to all frames irrespective of
        whether additional colors comes in play that require a redefined
        palette. Still a maximum of 256 color per frame, obviously.

        Written by Ant1 on 2010-08-22
        Modified by Alex Robinson in Janurari 2011 to implement subrectangles.
        Nrs   ó   ,r   r   ó   ‡r“   )r@   r[   Úxyr•   s       r   rŒ   zGifWriter.getImageDescriptorÐ   s�   € ð ˆ:ØˆBð ˆð 	�h�r˜!”u‰oŒoÑˆØ
�h�r˜!”u‰oŒoÑˆØ
�h�r”w˜q”zÑ"Ô"Ñ"ˆØ
�h�r”w˜q”zÑ"Ô"Ñ"ˆð 	ˆg‰ˆð ˆ	r   c                 ó|   — |dk    rdS |dk    rd}d}|dk    r#d}|dz  }|dz  }|t          |¦  «        z  }|dz  }|S )	z|Application extension. This part specifies the amount of loops.
        If loop is 0 or inf, it goes on infinitely.
        r   r   r   iÿÿ  s   !ÿs   NETSCAPE2.0s   ó    )re   )r@   rA   r•   s      r   r   zGifWriter.getAppExtî   se   € ð �1Š9ˆ9Ø�3Ø�1Š9ˆ9ØˆDØˆØ�1Š9ˆ9Ø ˆBØ�.Ñ ˆBØ�+ÑˆBØ•(˜4‘.”.Ñ ˆBØ�'‰MˆBØˆ	r   çš™™™™™¹?r"   c                 ó¾   — d}|t          |dz  dz  ¦  «                             d¦  «        z  }|t          t          |dz  dz   ¦  «        ¦  «        z  }|dz  }|dz  }|S )ab  Graphics Control Extension. A sort of header at the start of
        each image. Specifies duration and transparency.

        Dispose
        -------
          * 0 - No disposal specified.
          * 1 - Do not dispose. The graphic is to be left in place.
          * 2 - Restore to background color. The area used by the graphic
            must be restored to the background color.
          * 3 - Restore to previous. The decoder is required to restore the
            area overwritten by the graphic with what was there prior to
            rendering the graphic.
          * 4-7 -To be defined.
        s   !ùrS   r"   r†   éd   g      à?r›   )Úchrr‡   re   r   )r@   rB   r]   r•   s       r   r�   zGifWriter.getGraphicsControlExtÿ   sn   € ð  ˆØ
�c�7˜Q‘; 1Ñ$Ñ%Ô%×,Ò,¨WÑ5Ô5Ñ5ˆð 	�h•s˜8 c™>¨CÑ/Ñ0Ô0Ñ1Ô1Ñ1ˆØ
ˆg‰ˆØ
ˆg‰ˆØˆ	r   c                 óB  — | j         dk    r|dfS | j        }t          j        ||z
  ¦  «        }|j        dk    r|                     d¦  «        }t          j        |                     d¦  «        ¦  «        }t          j        |                     d¦  «        ¦  «        }|j        rb|j        r[t          |d         ¦  «        t          |d         dz   ¦  «        }}t          |d         ¦  «        t          |d         dz   ¦  «        }	}n
d\  }}d\  }}	|||	…||…f         ||ffS )ar  Calculate the minimal rectangle that need updating. Returns
        a two-element tuple containing the cropped image and an x-y tuple.

        Calculating the subrectangles takes extra time, obviously. However,
        if the image sizes were reduced, the actual writing of the GIF
        goes faster. In some cases applying this method produces a GIF faster.
        r   rs   rS   r"   r   rT   )r   r"   )	rY   rm   r3   ÚabsrU   ÚsumÚargwherer”   r   )
r@   r[   ÚprevÚdiffÚXÚYÚx0Úx1Úy0Úy1s
             r   ru   zGifWriter.getSubRectangle  s  € ð Œ;˜!ÒÐØ�v�:ÐàÔ#ˆõ Œv�b˜4‘iÑ Ô ˆØŒ9˜Š>ˆ>Ø—8’8˜A‘;”;ˆDåŒK˜Ÿš ™œÑ$Ô$ˆÝŒK˜Ÿš ™œÑ$Ô$ˆàŒ6ð 	�a”fð 	Ý˜˜1œ‘Y”Y¥ A b¤E¨A¡I¡¤�ˆBÝ˜˜1œ‘Y”Y¥ A b¤E¨A¡I¡¤�ˆBˆBà‰FˆB�Ø‰FˆB�à�"�R�%˜˜B˜�,Ô " b Ð)Ð)r   c                 ój  — t          |d¦  «        }|dv r?d}|                     d¦  «        }t          ||¦  «        }|                     ||¬¦  «        }n_|dv rI|dk    r|                     d¦  «        }n|                     d¦  «        }|                     ||¬	¦  «        }nt	          d
|z  ¦  «        ‚|S )zÿConvert image to Paletted PIL image.

        PIL used to not do a very good job at quantization, but I guess
        this has improved a lot (at least in Pillow). I don't think we need
        neuqant (and we can add it later if we really want).
        Úgif)ÚnqÚneuquantr   ÚRGBA)Úcolors)r   r   r"   r"   ÚRGB)r±   ÚmethodzInvalid value for quantizer: %r)r   ÚconvertÚNeuQuantÚquantizer2   )r@   r[   rE   Úpalette_sizer{   Únq_samplefacÚ
nqInstances          r   rv   zGifWriter.converToPIL9  sÆ   € õ    EÑ*Ô*ˆàÐ*Ð*Ð*àˆLØ—^’^ FÑ+Ô+ˆFÝ! &¨,Ñ7Ô7ˆJØ×(Ò(¨¸Ð(ÑEÔEˆFˆFØ˜)Ð#Ð#à˜AŠ~ˆ~ØŸš¨Ñ/Ô/��àŸš¨Ñ.Ô.�Ø—_’_¨LÀ�_ÑKÔKˆFˆFåÐ>ÀÑJÑKÔKÐKØˆr   )Tr   r   r   r   )rœ   r"   )r   )r
   r   r   r`   rq   rZ   rw   rN   rx   r~   rŒ   r   r�   ru   rv   r   r   r   r>   r>   e   sç   € € € € € ðð ð ØØØðð ð ð ð.ð ð ð2ð ð ð+ð +ð +ðð ð ðBð ð ðð ð ð ð<ð ð ð"ð ð ð ð4*ð *ð *ð@ð ð ð ð ð r   r>   )r`   ÚloggingÚnumpyr3   Úpillow_legacyr   r   r   Ú	getLoggerr
   r5   rµ   r   r   re   r>   r   r   r   ú<module>r¾      s  ððð ð €€€à Ð Ð Ð à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà	ˆÔ	˜8Ñ	$Ô	$€à€ð*ð *ð *ð *ð *�ñ *ô *ð *ð
Ið Ið Ið Ið I�ñ Iô Ið IðX-ð -ð -ðmð mð mð mð mñ mô mð mð mð mr   