Ë
    Eü´j-Ê  ã                   ó¬  — d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZmZmZmZ  ej                   e«      ZdZddddd	d
dœZd"d„Zd„ Zd„ Z ej0                  dddej2                  ¬«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de!«      Z" G d „ d!e!«      Z# e «       Z$y)#zìModule imageio/freeimage.py

This module contains the wrapper code for the freeimage library.
The functions defined in this module are relatively thin; just thin
enough so that arguments and results are native Python/numpy data
types.

é    Né   )Úget_remote_fileÚload_libÚDictÚresource_dirsÚIS_PYPYÚget_platformÚInternetNotAllowedErrorÚNeedDownloadErrorFz!libfreeimage-3.16.0-osx10.6.dylibzFreeImage-3.18.0-win32.dllzFreeImage-3.18.0-win64.dllzlibfreeimage-3.16.0-linux32.sozlibfreeimage-3.16.0-linux64.so)Úosx32Úosx64Úwin32Úwin64Úlinux32Úlinux64c                 óz   — t        «       }|r/|t        v r&dt        |   z   }t        || |¬«       dt        _        yyy)a…  Download the FreeImage library to your computer.

    Parameters
    ----------
    directory : str | None
        The directory where the file will be cached if a download was
        required to obtain the file. By default, the appdata directory
        is used. This is also the first directory that is checked for
        a local version of the file.
    force_download : bool | str
        If True, the file will be downloaded even if a local copy exists
        (and this copy will be overwritten). Can also be a YYYY-MM-DD date
        to ensure a file is up-to-date (modified date of a file on disk,
        if present, is checked).
    ú
freeimage/)ÚfnameÚ	directoryÚforce_downloadN)r	   ÚFNAME_PER_PLATFORMr   ÚfiÚ_lib)r   r   Úplatr   s       úX/root/workspace/ytshorts/venv/lib/python3.12/site-packages/imageio/plugins/_freeimage.pyÚdownloadr   /   s@   € ô  ‹>€DÙ�Ô*Ñ*ØÔ1°$Ñ7Ñ7ˆÜ˜e¨yÈÕXØŒ�ð +€tó    c                  ó4  — t        j                  dd«      } | r| S t        «       }|r!|t        v r	 t	        dt        |   z   d¬«      S yy# t
        $ r Y yt        $ r t        d«      ‚t        $ r(}t        j                  t        |«      «       Y d}~yd}~ww xY w)z7Ensure we have our version of the binary freeimage lib.ÚIMAGEIO_FREEIMAGE_LIBNr   F)ÚautozÀNeed FreeImage library. You can obtain it with either:
  - download using the command: imageio_download_bin freeimage
  - download by calling (in Python): imageio.plugins.freeimage.download()
)ÚosÚgetenvr	   r   r   r
   r   ÚRuntimeErrorÚloggerÚwarningÚstr)Úlibr   Úes      r   Úget_freeimage_libr)   F   s¢   € ô �)‰)Ð+¨TÓ
2€CÙ
Øˆ
ô ‹>€DÙ�Ô*Ñ*ð	#Ü" <Ô2DÀTÑ2JÑ#JÐQVÔWÐWð +€tøô 'ò 	ÙÜ ò 	Ü#ð9óð ô ò 	#Ü�N‰Nœ3˜q›6×"Ñ"ûð	#ús   °A	 Á		BÁBÁ/BÂBc                 óH   — | j                  t        j                  «       «      S ©N)ÚencodeÚsysÚgetfilesystemencoding)Úxs    r   Úefnr0   c   s   € Ø�8‰8”C×-Ñ-Ó/Ó0Ð0r   i   i ©Údtypec                   ó(  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZeej"                  eej$                  eej&                  eej(                  eej*                  e	ej,                  e
ej.                  eej0                  eej$                  eej$                  eej,                  eej,                  iZej"                  dfeej"                  dfeej"                  dfeej$                  dfeej&                  dfeej(                  dfeej*                  dfeej,                  dfe	ej.                  dfe
ej0                  dfeej$                  dfeej$                  dfeej,                  dfeej,                  dfeiZeg eg eg eg e	g e
g eg edgedgedgedgiZy)ÚFI_TYPESr   é   r   é   é   é   é   é   é   é	   é
   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚFIT_UNKNOWNÚ
FIT_BITMAPÚ
FIT_UINT16Ú	FIT_INT16Ú
FIT_UINT32Ú	FIT_INT32Ú	FIT_FLOATÚ
FIT_DOUBLEÚFIT_COMPLEXÚ	FIT_RGB16Ú
FIT_RGBA16ÚFIT_RGBFÚ	FIT_RGBAFÚnumpyÚuint8Úuint16Úint16Úuint32Úint32Úfloat32Úfloat64Ú
complex128ÚdtypesÚfi_typesÚ
extra_dims© r   r   r4   r4   k   sÑ  „ Ø€KØ€JØ€JØ€IØ€JØ€IØ€IØ€JØ€KØ€IØ€JØ€HØ€Ið 	�E—K‘KØ�E—L‘LØ�5—;‘;Ø�E—L‘LØ�5—;‘;Ø�5—=‘=Ø�E—M‘MØ�U×%Ñ%Ø�5—<‘<Ø�E—L‘LØ�%—-‘-Ø�5—=‘=ð€Fð  
�‰�aÐ˜*Ø	�‰�aÐ˜*Ø	�‰�aÐ˜*Ø	�‰�qÐ˜:Ø	�‰�aÐ˜)Ø	�‰�qÐ˜:Ø	�‰�aÐ˜)Ø	�‰˜Ð˜IØ	�‰˜Ð˜JØ	×	Ñ	˜1Ð˜{Ø	�‰�qÐ˜9Ø	�‰�qÐ˜:Ø	�‰˜Ð˜HØ	�‰˜Ð˜Ið€Hð$ 	�BØ�2Ø�BØ�2Ø�2Ø�BØ�RØ�A�3Ø�Q�CØ�1�#Ø�A�3ð�Jr   r4   c                   ó`  — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZd	ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd
ZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNdZOdZPdZQdZRdZSdZTdZUdZVdZWy)ÚIO_FLAGSi €  r   r5   r   r7   r;   é   é    é@   é€   é   i   é   i   i    i   i @  i   i   i   r6   r9   r<   N)Xr@   rA   rB   ÚFIF_LOAD_NOPIXELSÚBMP_DEFAULTÚBMP_SAVE_RLEÚCUT_DEFAULTÚDDS_DEFAULTÚEXR_DEFAULTÚ	EXR_FLOATÚEXR_NONEÚEXR_ZIPÚEXR_PIZÚ	EXR_PXR24ÚEXR_B44ÚEXR_LCÚFAXG3_DEFAULTÚGIF_DEFAULTÚGIF_LOAD256ÚGIF_PLAYBACKÚHDR_DEFAULTÚICO_DEFAULTÚICO_MAKEALPHAÚIFF_DEFAULTÚJ2K_DEFAULTÚJP2_DEFAULTÚJPEG_DEFAULTÚ	JPEG_FASTÚJPEG_ACCURATEÚ	JPEG_CMYKÚJPEG_EXIFROTATEÚJPEG_QUALITYSUPERBÚJPEG_QUALITYGOODÚJPEG_QUALITYNORMALÚJPEG_QUALITYAVERAGEÚJPEG_QUALITYBADÚJPEG_PROGRESSIVEÚJPEG_SUBSAMPLING_411ÚJPEG_SUBSAMPLING_420ÚJPEG_SUBSAMPLING_422ÚJPEG_SUBSAMPLING_444ÚJPEG_OPTIMIZEÚJPEG_BASELINEÚKOALA_DEFAULTÚLBM_DEFAULTÚMNG_DEFAULTÚPCD_DEFAULTÚPCD_BASEÚPCD_BASEDIV4ÚPCD_BASEDIV16ÚPCX_DEFAULTÚPFM_DEFAULTÚPICT_DEFAULTÚPNG_DEFAULTÚPNG_IGNOREGAMMAÚPNG_Z_BEST_SPEEDÚPNG_Z_DEFAULT_COMPRESSIONÚPNG_Z_BEST_COMPRESSIONÚPNG_Z_NO_COMPRESSIONÚPNG_INTERLACEDÚPNM_DEFAULTÚPNM_SAVE_RAWÚPNM_SAVE_ASCIIÚPSD_DEFAULTÚPSD_CMYKÚPSD_LABÚRAS_DEFAULTÚRAW_DEFAULTÚRAW_PREVIEWÚRAW_DISPLAYÚSGI_DEFAULTÚTARGA_DEFAULTÚTARGA_LOAD_RGB888ÚTARGA_SAVE_RLEÚTIFF_DEFAULTÚ	TIFF_CMYKÚTIFF_PACKBITSÚTIFF_DEFLATEÚTIFF_ADOBE_DEFLATEÚ	TIFF_NONEÚTIFF_CCITTFAX3ÚTIFF_CCITTFAX4ÚTIFF_LZWÚ	TIFF_JPEGÚTIFF_LOGLUVÚWBMP_DEFAULTÚXBM_DEFAULTÚXPM_DEFAULTr\   r   r   r^   r^   ©   s»  „ ØÐà€KØ€LØ€KØ€KØ€KØ€IØ€HØ€GØ€GØ€IØ€Gà€Fà€MØ€KØ€Kà€Là€KØ€KØ€Mà€KØ€KØ€KØ€Là€Ià€Mà€Ià€OàÐØÐØÐØ ÐØ€OØÐà!Ðà!Ðà!ÐØ"ÐØ€Mà€MØ€MØ€KØ€KØ€KØ€HØ€LØ€MØ€KØ€KØ€LØ€KØ€OØÐà &Ðà#Ðà!ÐØ€Nà€KØ€LØ€NØ€KØ€HØ€GØ€KØ€KØ€Kà€KØ€KØ€MØÐØ€NØ€LØ€Ià€MØ€LØÐØ€IØ€NØ€NØ€HØ€IØ€KØ€LØ€KØ�Kr   r^   c                   ó4   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)ÚMETADATA_MODELSr   r5   r   r6   r7   r8   r9   r:   r;   r<   N)r@   rA   rB   ÚFIMD_COMMENTSÚFIMD_EXIF_MAINÚFIMD_EXIF_EXIFÚFIMD_EXIF_GPSÚFIMD_EXIF_MAKERNOTEÚFIMD_EXIF_INTEROPÚ	FIMD_IPTCÚFIMD_XMPÚFIMD_GEOTIFFÚFIMD_ANIMATIONr\   r   r   r»   r»     s6   „ Ø€MØ€NØ€NØ€MØÐØÐØ€IØ€HØ€LØ�Nr   r»   c                   óˆ  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZi eej*                  “eej,                  “eej.                  “edej.                  fdej.                  fg“eej0                  “eej2                  “eej0                  “eej4                  “e	ej*                  “e
ej6                  “eej8                  “edej8                  fdej8                  fg“eej:                  “eej<                  “eej.                  “edej*                  fdej*                  fdej*                  fdej*                  fg“Zy)ÚMETADATA_DATATYPEr5   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   é   é   r_   é   é   Ú	numeratorÚdenominatorÚRÚGÚBÚAN) r@   rA   rB   Ú	FIDT_BYTEÚ
FIDT_ASCIIÚ
FIDT_SHORTÚ	FIDT_LONGÚFIDT_RATIONALÚ
FIDT_SBYTEÚFIDT_UNDEFINEDÚFIDT_SSHORTÚ
FIDT_SLONGÚFIDT_SRATIONALÚ
FIDT_FLOATÚFIDT_DOUBLEÚFIDT_IFDÚFIDT_PALETTEÚ
FIDT_LONG8ÚFIDT_SLONG8Ú	FIDT_IFD8rP   rQ   rR   rT   Úuint64Úint64Úint8rS   rU   rV   rW   rY   r\   r   r   rÇ   rÇ   #  s¯  „ Ø€IØ€JØ€JØ€IØ€MØ€JØ€NØ€KØ€JØ€NØ€JØ€KØ€HØ€LØ€JØ€KØ€IðØ�5—;‘;ðà�E—L‘Lðð 	�5—<‘<ðð 	˜ e§l¡lÐ3°mÀUÇ\Á\Ð5RÐSð	ð
 	�E—L‘Lðð 	�U—[‘[ðð 	�5—<‘<ðð 	�E—J‘Jðð 	˜Ÿ™ðð 	�U—[‘[ðð 	�E—K‘Kðð 	˜+ u§{¡{Ð3°mÀUÇ[Á[Ð5QÐRðð 	�E—M‘Mðð 	�U—]‘]ðð 	�%—,‘,ðð  	Ø�%—+‘+ÐØ�%—+‘+ÐØ�%—+‘+ÐØ�%—+‘+Ðð	
ð!�Fr   rÇ   c            	       ó:  — e Zd ZdZi dej
                  df“dej
                  df“dej
                  df“dej
                  df“dej                  df“dej
                  df“d	ej
                  df“d
ej
                  df“dej
                  df“dej
                  df“dej
                  df“dej
                  df“dej
                  df“dej
                  df“dej                  df“dej                  df“dej                  df“i dej                  df“dej
                  df“dej                  df“dej
                  df“dej                  df“dej                  df“dej                  df“dej                  df“dej                  df“dej                  df“dej
                  df“dej                  df“d ej                  df“d!ej                  df“d"ej                  df“d#ej                  df“d$ej                  df“¥ej                  dfej                  dfej                  dfej                  dfej
                  dfej                  dfej
                  dfd%œ¥Zd&„ Z	e
d'„ «       Zd(„ Zd)„ Zd*„ Zd+„ Zd,„ Zd-„ Zd.„ Zd/„ Zd0„ Zd1„ Zd5d2„Zd6d3„Zd6d4„Zy)7Ú	Freeimageaó  Class to represent an interface to the FreeImage library.
    This class is relatively thin. It provides a Pythonic API that converts
    Freeimage objects to Python objects, but that's about it.
    The actual implementation should be provided by the plugins.

    The recommended way to call into the Freeimage library (so that
    errors and warnings show up in the right moment) is to use this
    object as a context manager:
    with imageio.fi as lib:
        lib.FreeImage_GetPalette()

    ÚFreeImage_AllocateTNÚFreeImage_FindFirstMetadataÚFreeImage_GetBitsÚFreeImage_GetPaletteÚFreeImage_GetTagKeyÚFreeImage_GetTagValueÚFreeImage_CreateTagÚFreeImage_SaveÚFreeImage_LoadÚFreeImage_LoadFromMemoryÚFreeImage_OpenMultiBitmapÚ#FreeImage_LoadMultiBitmapFromMemoryÚFreeImage_LockPageÚFreeImage_OpenMemoryÚFreeImage_GetVersionÚFreeImage_GetFIFExtensionListÚFreeImage_GetFormatFromFIFÚFreeImage_GetFIFDescriptionÚFreeImage_ColorQuantizeExÚFreeImage_IsLittleEndianÚFreeImage_SetOutputMessageÚFreeImage_GetFIFCountÚFreeImage_IsPluginEnabledÚFreeImage_GetFileTypeÚFreeImage_GetTagTypeÚFreeImage_GetTagLengthÚFreeImage_FindNextMetadataÚFreeImage_FindCloseMetadataÚFreeImage_GetFIFFromFilenameÚFreeImage_FIFSupportsReadingÚFreeImage_FIFSupportsWritingÚFreeImage_FIFSupportsExportTypeÚFreeImage_FIFSupportsExportBPPÚFreeImage_GetHeight)ÚFreeImage_GetWidthÚFreeImage_GetImageTypeÚFreeImage_GetBPPÚFreeImage_GetColorsUsedÚFreeImage_ConvertTo32BitsÚFreeImage_GetPitchÚFreeImage_Unloadc                 ó>  ‡ — d ‰ _         t        j                  «       ‰ _        g ‰ _        t
        j                  j                  d«      rt        j                  }nt        j                  } |d t        j                  t        j                  «      ˆ fd„«       }|‰ _        y )NÚwinc                 óø   •— |j                  d«      }‰j                  j                  |«       t        ‰j                  «      dkD  r5‰j                  j	                  d«       t        ‰j                  «      dkD  rŒ4y y )Núutf-8rc   r   )ÚdecodeÚ	_messagesÚappendÚlenÚpop)ÚfifÚmessageÚselfs     €r   Úerror_handlerz)Freeimage.__init__.<locals>.error_handler«  sY   ø€ à—n‘n WÓ-ˆGØ�N‰N×!Ñ! 'Ô*Ü�t—~‘~Ó&¨#Ò-Ø—‘×"Ñ" 1Ô%ô �t—~‘~Ó&¨#Õ-r   )r   Ú	threadingÚRLockÚ_lockr  r-   ÚplatformÚ
startswithÚctypesÚWINFUNCTYPEÚ	CFUNCTYPEÚc_intÚc_char_pÚ_error_handler)r  Úfunctyper  s   `  r   Ú__init__zFreeimage.__init__š  s|   ø€ àˆŒ	ô —_‘_Ó&ˆŒ
ð ˆŒô �<‰<×"Ñ" 5Ô)Ü×)Ñ)‰Hä×'Ñ'ˆHñ 
�$œŸ™¤f§o¡oÓ	6ó	&ó 
7ð	&ð ,ˆÕr   c                 ó(  — | j                   €	 | j                  «        t	        | j                   t        «      rt        | j                   «      ‚| j                   S # t        $ r/}d| _         | xj                   t        |«      z  c_         Y d }~Œnd }~ww xY w)Nz+The freeimage library could not be loaded: )r   Úload_freeimageÚOSErrorr&   Ú
isinstancer#   )r  Úerrs     r   r'   zFreeimage.libµ  ss   € à�9‰9Ðð&Ø×#Ñ#Ô%ô �d—i‘i¤Ô%Ü˜tŸy™yÓ)Ð)Ø�y‰yÐøô ò &ØI�”	Ø—	’	œS ›XÑ%—	’	ûð&ús   ŽA Á	BÁ"%BÂBc                 ó<   — 	 | j                    y# t        $ r Y yw xY w)NFT)r'   Ú	Exception©r  s    r   Úhas_libzFreeimage.has_libÁ  s'   € ð	Ø�HŠHð øô ò 	Ùð	ús   ‚ �	šc                 óÂ  — d}	 | j                  «        | j                  «        | j                  j                  «       j	                  d«      dk\  rd}|s*t        «        | j                  «        | j                  «        | j                  j                  | j                  «       | j                  j                  «       j	                  d«      | _	        y# t
        $ r Y Œ‹w xY w)z…Try to load the freeimage lib from the system. If not successful,
        try to download the imageio version and try again.
        Fr  z3.15TN)
Ú_load_freeimageÚ_register_apir'   rö   r  r-  r)   rü   r(  Úlib_version)r  Úsuccesss     r   r,  zFreeimage.load_freeimageÈ  s¾   € ð
 ˆð	ð × Ñ Ô"Ø×ÑÔ Ø�x‰x×,Ñ,Ó.×5Ñ5°gÓ>À&ÒHØ�ñ äÔØ× Ñ Ô"Ø×ÑÔ ð 	�‰×+Ñ+¨D×,?Ñ,?Ô@ØŸ8™8×8Ñ8Ó:×AÑAÀ'ÓJˆÕøô ò 	Ùð	ús   „AC Ã	CÃCc           	      ó¨  — ddg}g d¢}t        «       }t        «       }|rAt        |   }|D ]3  }|j                  dt        j
                  j                  |d|«      «       Œ5 t	        j                  dd «      }|�|j                  d|«       	 t        |||«      \  }}|| _        || _        y # t        $ r}t        |«      dz   }	t        |	«      ‚d }~ww xY w)NÚ	freeimageÚlibfreeimage)Ú	FreeImagezlibfreeimage.dylibzlibfreeimage.sozlibfreeimage.so.3r   r   z&
Please install the FreeImage library.)r   r	   r   Úinsertr!   ÚpathÚjoinr"   r   r-  r&   r   Ú	lib_fname)
r  Ú	lib_namesÚexact_lib_namesÚres_dirsr   r   Údirr'   r/  Úerr_msgs
             r   r5  zFreeimage._load_freeimageâ  sÝ   € à  .Ð1ˆ	ò
ˆô !“?ˆÜ‹~ˆÙÜ& tÑ,ˆEØò Q�Ø×&Ñ& q¬"¯'©'¯,©,°s¸KÈÓ*OÕPðQô �i‰iÐ/°Ó6ˆØˆ?Ø×"Ñ" 1 cÔ*ð	#Ü! /°9¸hÓG‰JˆC�ð ˆŒ	Øˆ�øô ò 	#Ü˜#“hÐ!JÑJˆGÜ˜'Ó"Ð"ûð	#ús   ÂB* Â*	CÂ3CÃCc                 ó–   — | j                   j                  «       D ],  \  }\  }}t        | j                  |«      }||_        ||_        Œ. y r+   )Ú_APIÚitemsÚgetattrr'   ÚrestypeÚargtypes)r  ÚfrJ  rK  Úfuncs        r   r6  zFreeimage._register_api  sD   € à&*§i¡i§o¡oÓ&7ò 	%Ñ"ˆAÑ"�˜Ü˜4Ÿ8™8 QÓ'ˆDØ"ˆDŒLØ$ˆD�Mñ	%r   c                 óN   — | j                   j                  «        | j                  S r+   )r   Úacquirer'   r2  s    r   Ú	__enter__zFreeimage.__enter__  s   € Ø�
‰
×ÑÔØ�x‰xˆr   c                 óX   — | j                  «        | j                  j                  «        y r+   )Ú_show_any_warningsr   Úrelease)r  Úargss     r   Ú__exit__zFreeimage.__exit__  s   € Ø×ÑÔ!Ø�
‰
×ÑÕr   c                 ó   — g | _         y)zwReset the list of output messages. Call this before
        loading or saving an image with the FreeImage API.
        N©r  r2  s    r   Ú
_reset_logzFreeimage._reset_log  s   € ð ˆ�r   c                 óv   — | j                   r-dj                  | j                   «      }| j                  «        |S y)z§Get the output messages produced since the last reset as
        one string. Returns 'No known reason.' if there are no messages.
        Also resets the log.
        ú zNo known reason.)r  r?  rX  )r  Úress     r   Ú_get_error_messagezFreeimage._get_error_message  s/   € ð
 �>Š>Ø—(‘(˜4Ÿ>™>Ó*ˆCØ�O‰OÔØˆJà%r   c                 óŠ   — | j                   r7t        j                  d| j                  «       z   «       | j	                  «        yy)z‰If there were any messages since the last reset, show them
        as a warning. Otherwise do nothing. Also resets the messages.
        zimageio.freeimage warning: N)r  r$   r%   r\  rX  r2  s    r   rR  zFreeimage._show_any_warnings&  s5   € ð �>Š>Ü�N‰NÐ8¸4×;RÑ;RÓ;TÑTÔUØ�O‰OÕð r   c                 ó@   — | j                   D �cg c]  }|‘Œ c}S c c}w )zwReturn a list of the last 256 output messages
        (warnings and errors) produced by the FreeImage library.
        rW  )r  Úms     r   Úget_output_logzFreeimage.get_output_log.  s   € ð
  Ÿ>™>Ö*�a’Ò*Ð*ùÒ*s   �	c                 óØ  — | 5 }d}|dvrt        d«      ‚|dk(  rÁ|�€|j                  t        j                  |«      t	        |«      «      }|j                  t        j                  |«      t	        |«      «      }|j                  t        j                  |«      «       |dk(  r:t        j                  j                  |«      r|j                  t        |«      d«      }|dk(  r|j                  t        |«      «      }|dk(  rt        d|z  «      ‚|dk(  r|j                  |«      st        d	|z  «      ‚|dk(  r|j                  |«      st        d
|z  «      ‚|cddd«       S # 1 sw Y   yxY w)a  Get the freeimage Format (FIF) from a given filename.
        If mode is 'r', will try to determine the format by reading
        the file, otherwise only the filename is used.

        This function also tests whether the format supports reading/writing.
        éÿÿÿÿÚrwz"Invalid mode (must be "r" or "w").ÚrNr   z$Cannot determine format of file "%s"Úwz$Cannot write the format of file "%s"z#Cannot read the format of file "%s")Ú
ValueErrorrõ   r#  r'  r  ÚFreeImage_GetFileTypeFromMemoryÚc_void_pÚFreeImage_CloseMemoryr!   r>  Úisfilerÿ   r0   r  r  r  )r  ÚfilenameÚmodeÚbbr'   ÚftypeÚfimemorys          r   ÚgetFIFzFreeimage.getFIF5  sN  € ð ð 	�SàˆEØ˜4ÑÜ Ð!EÓFÐFð
 �sŠ{Ø�>Ø"×7Ñ7¼¿¹ÈÓ8KÌSÐQSËWÓU�HØ×?Ñ?ÜŸ™¨Ó1´3°r³7ó�Eð ×-Ñ-¬f¯o©o¸hÓ.GÔHØ˜R’K¤R§W¡W§^¡^°HÔ%=Ø×5Ñ5´c¸(³mÀQÓG�Eà˜Š{Ø×8Ñ8¼¸X»ÓG�ð ˜Š{Ü Ð!GÈ(Ñ!RÓSÐSØ˜’ S×%EÑ%EÀeÔ%LÜ Ð!GÈ(Ñ!RÓSÐSØ˜’ S×%EÑ%EÀeÔ%LÜ Ð!FÈÑ!QÓRÐRØ÷;	÷ 	ò 	ús   ƒEE Å E)c                 ó   — t        | |||«      S )zXcreate_bitmap(filename, ftype, flags=0)
        Create a wrapped bitmap object.
        )ÚFIBitmap©r  rk  rn  Úflagss       r   Úcreate_bitmapzFreeimage.create_bitmap[  s   € ô ˜˜h¨¨uÓ5Ð5r   c                 ó   — t        | |||«      S )zlcreate_multipage_bitmap(filename, ftype, flags=0)
        Create a wrapped multipage bitmap object.
        )ÚFIMultipageBitmaprs  s       r   Úcreate_multipage_bitmapz!Freeimage.create_multipage_bitmapa  s   € ô !  x°¸Ó>Ð>r   r+   )r   )r@   rA   rB   Ú__doc__r#  rh  r'  r&  rG  r*  Úpropertyr'   r3  r,  r5  r6  rP  rU  rX  r\  rR  r`  rp  ru  rx  r\   r   r   rç   rç   O  sµ  „ ñð;ð 	 §¡°Ð6ð;ð 	&¨¯©¸Ð'>ð;ð 	˜fŸo™o¨tÐ4ð;ð  	 §¡°$Ð 7ð!;ð" 	 §¡°Ð6ð#;ð$ 	  &§/¡/°4Ð!8ð%;ð& 	 §¡°Ð6ð';ð( 	˜6Ÿ?™?¨DÐ1ð);ð* 	˜6Ÿ?™?¨DÐ1ð+;ð, 	# V§_¡_°dÐ$;ð-;ð. 	$ f§o¡o°tÐ%<ð/;ð0 	.°·±ÀÐ/Fð1;ð2 	˜vŸ™°Ð5ð3;ð4 	 §¡°$Ð 7ð5;ð: 	 §¡°$Ð 7ð;;ð< 	(¨&¯/©/¸4Ð)@ð=;ð> 	% v§¡¸Ð&=ñ?;ð@ 	&¨¯©¸Ð'>ðA;ðB 	$ f§o¡o°tÐ%<ðC;ðF 	# V§\¡\°4Ð$8ðG;ðH 	% v§¡¸Ð&=ðI;ðJ 	  &§,¡,°Ð!5ðK;ðL 	$ f§l¡l°DÐ%9ðM;ðN 	  &§,¡,°Ð!5ðO;ðR 	 §¡¨tÐ 4ðS;ðT 	! 6§<¡<°Ð"6ðU;ðV 	% v§|¡|°TÐ&:ðW;ðX 	&¨¯©¸Ð'>ðY;ð\ 	'¨¯©°tÐ(<ð];ð^ 	'¨¯©°tÐ(<ð_;ð` 	'¨¯©°tÐ(<ða;ðb 	*¨F¯L©L¸$Ð+?ðc;ðd 	)¨6¯<©<¸Ð*>ðe;ðf 	 §¡¨dÐ3ñg;ðh  &Ÿ|™|¨TÐ2Ø#)§<¡<°Ð"6Ø#Ÿ\™\¨4Ð0Ø$*§L¡L°$Ð#7Ø&,§o¡o°tÐ%<Ø%Ÿ|™|¨TÐ2Ø#Ÿ_™_¨dÐ3òu;€Dòz,ð6 ñ	ó ð	òòKò4òB%òòòò
&òò+ó$óL6ô?r   rç   c                   ó2   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zy)	ÚFIBaseBitmapc                 óX   — || _         || _        || _        || _        d | _        g | _        y r+   )Ú_fiÚ	_filenameÚ_ftypeÚ_flagsÚ_bitmapÚ_close_funcs)r  r   rk  rn  rt  s        r   r*  zFIBaseBitmap.__init__i  s-   € ØˆŒØ!ˆŒØˆŒØˆŒØˆŒØˆÕr   c                 ó$   — | j                  «        y r+   )Úcloser2  s    r   Ú__del__zFIBaseBitmap.__del__q  s   € Ø�
‰
�r   c                 óò   — | j                   �P| j                  rC| j                  D ]%  }	 | j                  5  |d   } ||dd  Ž  d d d «       Œ' g | _        d | _         y y y # 1 sw Y   ŒxY w# t        $ r Y ŒPw xY w)Nr   r5   )r‚  rƒ  r~  r1  )r  Ú
close_funcÚfuns      r   r…  zFIBaseBitmap.closet  sŽ   € Ø�L‰LÐ$¨$×*;Ò*;Ø"×/Ñ/ò �
ðØŸ™ñ -Ø(¨™m˜Ù˜Z¨¨˜^Ñ,÷-øðð !#ˆDÔØˆD�Lð +<Ð$÷-ð -ûô !ò Ùðús(   ©A*µAÁA*ÁA'	Á#A*Á*	A6Á5A6Nc                 ó°   — | j                   �	 |€"| j                  j                  j                  |f}|| _         |r| j                  j                  |«       yy)zAFunction to set the bitmap and specify the function to unload it.N)r‚  r~  r'   r  rƒ  r  )r  Úbitmaprˆ  s      r   Ú_set_bitmapzFIBaseBitmap._set_bitmap€  sP   € à�<‰<Ð#ØØÐØŸ™Ÿ™×6Ñ6¸Ð>ˆJàˆŒÙØ×Ñ×$Ñ$ ZÕ0ð r   c           	      óø  — t         j                  j                  «       D ��cg c]  \  }}|j                  d«      r|dd  |f‘Œ }}}t	        «       }t        j                  «       }| j                  5 }|D �]Ø  \  }}|j                  || j                  t        j                  |«      «      }t        j                  |«      }|sŒOd}	|	�rt|j                  |«      j                  d«      }
|j                  |«      }|j                  |«      }t
        j                  |z  }|j!                  |j#                  |«      «      }t%        t'        |«      «      }|}|t(        j*                  k(  r|j                  dd«      }n{|t(        j,                  v rit(        j,                  |   }t.        rt1        |t2        t4        f«      rn9	 t7        j8                  ||¬«      j;                  «       }t=        |«      dk(  r|d   }|jA                  |t	        «       «      }|||
<   |jC                  |t        j                  |«      «      }	|	r�Œt|jE                  |«       �ŒÛ |cd d d «       S c c}}w # t>        $ r Y Œxw xY w# 1 sw Y   y xY w)	NÚFIMD_r8   Tr  Úreplacer1   r5   r   )#r»   Ú__dict__rH  r"  r   r#  rh  r~  ré   r‚  Úbyrefrì   r  r   r  Úc_charÚfrom_addressrí   ÚbytesÚ	bytearrayrÇ   rÓ   rY   r   r.  ÚlistÚtuplerP   Ú
frombufferÚcopyr  r1  Ú
setdefaultr  r  )r  ÚnameÚnumberÚmodelsÚmetadataÚtagr'   Ú
model_nameÚmdhandleÚmoreÚtag_nameÚtag_typeÚ	byte_sizeÚchar_ptrÚdataÚ	tag_bytesÚtag_valr2   Úsubdicts                      r   Úget_meta_datazFIBaseBitmap.get_meta_data‹  sR  € ô !0× 8Ñ 8× >Ñ >Ó @÷
á��fØ�‰˜wÔ'ð �!�"ˆX�vÒð
ˆñ 
ô “6ˆÜ�o‰oÓˆà�X‰Xð 2	˜à&,ó ->Ñ"�
˜Fà×:Ñ:Ø˜DŸL™L¬&¯,©,°sÓ*;ó�ô "Ÿ?™?¨8Ó4�Úà�DÚà#&×#:Ñ#:¸3Ó#?×#FÑ#FÀwÓ#O˜Ø#&×#;Ñ#;¸CÓ#@˜Ø$'×$>Ñ$>¸sÓ$C˜	Ü#)§=¡=°9Ñ#<˜Ø'×4Ñ4°S×5NÑ5NÈsÓ5SÓT˜ä$)¬)°D«/Ó$:˜	à"+˜à#Ô'8×'CÑ'CÒCØ&/×&6Ñ&6°wÀ	Ó&J™GØ%Ô):×)AÑ)AÑAÜ$5×$<Ñ$<¸XÑ$F˜EÝ&¬:°e¼dÄE¸]Ô+KØ $ð!)Ü.3×.>Ñ.>Ø(1¸ô/&ç&*¡d£fð %,ô (+¨7£|°qÒ'8Ø29¸!±*¨ð #+×"5Ñ"5°jÄ$Ã&Ó"I˜Ø,3˜ Ñ)à"×=Ñ=Ø$¤f§l¡l°3Ó&7ó ˜ó? ðH ×3Ñ3°HÖ=ð[->ð` ÷e2	ñ 2	ùó
øô\ (1ò !)Ù$(ð!)ú÷I2	ð 2	úsD   ¢"IÁ1AI0ÃC8I0Æ<8I!Ç4AI0È<I0É!	I-É*I0É,I-É-I0É0I9c                 óŒ  — i }t         j                  j                  «       D ]  \  }}|j                  d«      sŒ|||dd  <   Œ! d„ }| j                  5 }|j                  «       D �]Î  \  }}|j                  |d «      }|€Œ|j                  «       D �]Ÿ  \  }	}
|j                  «       }t        j                  |«      }	 d}t        |
t        «      r	 |
j                  d«      }d}|rt        j                  }t        «      }n}t!        |
d«      st#        j$                  |
g«      }
 ||
j&                  «      }|€+t(        j+                  d|	z  «       	 |j-                  |«       ŒÒ|
j/                  «       }|
j0                  }|j3                  ||	j                  d	«      «       |j5                  ||«       |j7                  ||«       |j9                  |t        |«      «       |j;                  ||«       |j=                  |«      }|j?                  || j@                  ||«       |j-                  |«       �Œ¢ �ŒÑ 	 d d d «       y # t        $ r Y �Œiw xY w# tB        $ rI}t(        j+                  d
|	›d| j                  jE                  «       ›dt        |«      ›�«       Y d }~Œ~d }~ww xY w# |j-                  |«       w xY w# 1 sw Y   y xY w)NrŽ  r8   c                 ób   — t         j                  j                  «       D ]  \  }}| |k(  sŒ|c S  y r+   )rÇ   rY   rH  )r2   rœ  Únumpy_dtypes      r   Úget_tag_type_numberz7FIBaseBitmap.set_meta_data.<locals>.get_tag_type_numberÖ  s7   € Ü'8×'?Ñ'?×'EÑ'EÓ'Gò Ñ#�˜Ø˜KÓ'Ø!’Mðð r   FÚasciiTr2   z>imageio.freeimage warning: Could not determine tag type of %r.r  z,imagio.freeimage warning: Could not set tag z: z, )#r»   r�  rH  r"  r~  Úgetrî   r#  rh  r.  r&   r,   ÚUnicodeErrorrÇ   rÓ   r  ÚhasattrrP   Úarrayr2   r$   r%   ÚFreeImage_DeleteTagÚtobytesÚsizeÚFreeImage_SetTagKeyÚFreeImage_SetTagTypeÚFreeImage_SetTagCountÚFreeImage_SetTagLengthÚFreeImage_SetTagValuerì   ÚFreeImage_SetMetadatar‚  r1  r\  )r  rž  r�  r›  rœ  r¯  r'   r   rª  r£  r©  rŸ  Úis_asciir¨  r¤  Ú	tag_countÚtag_keyr/  s                     r   Úset_meta_datazFIBaseBitmap.set_meta_dataÎ  s‘  € àˆÜ+×4Ñ4×:Ñ:Ó<ò 	*‰LˆD�&Ø�‰˜wÕ'Ø#)��t˜A˜B�xÒ ð	*ò
	ð �X‰Xð 5	5˜Ø'/§~¡~Ó'7ó 45Ñ#�
˜GàŸ™ J°Ó5�Ø�>Øà)0¯©«ó .5Ñ%�H˜gà×1Ñ1Ó3�CÜ Ÿ/™/¨#Ó.�Cð)5à#(˜Ü% g¬sÔ3ð%Ø,3¯N©N¸7Ó,C 	Ø+/ ñ $Ü'8×'CÑ'C˜HÜ(+¨I«™Iä#*¨7°GÔ#<Ü*/¯+©+°w°iÓ*@ Ù':¸7¿=¹=Ó'I˜HØ'Ð/Ü &§¡ð%@ØBJñ%Kô!"ð !)ð( ×/Ñ/°Õ4ð' )0¯©Ó(9˜IØ(/¯©˜Ià×/Ñ/°°X·_±_ÀWÓ5MÔNØ×0Ñ0°°hÔ?Ø×1Ñ1°#°yÔAØ×2Ñ2°3¼¸I»ÔGØ×1Ñ1°#°yÔAà"%×"9Ñ"9¸#Ó">˜Ø×1Ñ1°&¸$¿,¹,ÈÐQTÔUð ×/Ñ/°Ö4ò].5ñ45÷5	5ð 5	5øô& $0ò %Ú $ð%ûô6 %ò ÜŸšò  (¨¯©×)DÑ)DÕ)FÌÈCÌðR÷ñ ûðûð ×/Ñ/°Õ4ú÷k5	5ð 5	5úsu   ÁA)J:Â<IÃH?Ã"A,IÅJ:Å!B=IÈJ:È?	I	ÉIÉI	ÉIÉ	J!	É?J	ÊJ$ÊJ!	Ê!J$Ê$J7	Ê7J:Ê:Kr+   )	r@   rA   rB   r*  r†  r…  rŒ  r«  rÁ  r\   r   r   r|  r|  h  s#   „ òòò
 ó	1òAóFD5r   r|  c                   óL   — e Zd ZdZd„ Zdd„Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zdd„Zy)rr  z!Wrapper for the FI bitmap object.c           
      ó˜  — t        |t        j                  «      sJ ‚|j                  }|j                  }|d d \  }}t        |«      dk(  rd}nt        |«      dk(  r|d   }n|d   }	 t        j                  |j                  |f   }|| _	        | j                  5 }d|j                  z  |z  }	|j                  ||||	ddd«      }
t        j                   |
«      }
|
s&t#        d| j                  j%                  «       z  «      ‚| j'                  |
|j(                  |
f«       d d d «       y # t        $ r t        d«      ‚w xY w# 1 sw Y   y xY w)Nr   r5   r6   r   z,Cannot write arrays of given type and shape.r;   z)Could not allocate bitmap for storage: %s)r.  rP   ÚndarrayÚshaper2   r  r4   rZ   ÚtypeÚ_fi_typeÚKeyErrorrf  r~  Úitemsizerè   r#  rh  r#   r\  rŒ  r  )r  r´  rÅ  r2   rd  ÚcÚ
n_channelsÚfi_typer'   Úbppr‹  s              r   ÚallocatezFIBitmap.allocate  sY  € ä˜%¤§¡Ô/Ð/Ð/Ø—‘ˆØ—‘ˆð �R�aˆy‰ˆˆ1Üˆu‹:˜Š?Ø‰JÜ�‹Z˜1Š_Ø˜q™‰Jà˜q™ˆJð	MÜ×'Ñ'¨¯©°ZÐ(@ÑAˆGØ#ˆDŒMð
 �X‰Xð 	E˜Ø�e—n‘nÑ$ zÑ1ˆCØ×,Ñ,¨W°a¸¸CÀÀAÀqÓIˆFÜ—_‘_ VÓ,ˆFñ Ü"Ø?Ø—h‘h×1Ñ1Ó3ñ4óð ð ×Ñ˜V c×&:Ñ&:¸FÐ%CÔD÷	Eð 	Eøô	 ò 	MÜÐKÓLÐLð	Mú÷	Eð 	Eús   Á(&D( ÂBE Ä(D=Å E	Nc                 ó’  — |€| j                   }| j                  5 }|j                  | j                  t	        |«      | j
                  «      }t        j                  |«      }|s3t        d| j                   ›d| j                  j                  «       ›�«      ‚| j                  ||j                  |f«       d d d «       y # 1 sw Y   y xY w)NzCould not load bitmap "ú": )r  r~  rð   r€  r0   r�  r#  rh  rf  r\  rŒ  r  )r  rk  r'   r‹  s       r   Úload_from_filenamezFIBitmap.load_from_filename<  s¬   € ØÐØ—~‘~ˆHà�X‰Xð 	E˜à×'Ñ'¨¯©´S¸³]ÀDÇKÁKÓPˆFÜ—_‘_ VÓ,ˆFñ Ý à—~“~ t§x¡x×'BÑ'BÔ'DðFóð ð ×Ñ˜V c×&:Ñ&:¸FÐ%CÔD÷	E÷ 	Eñ 	Eús   ›BB=Â=Cc                 ó  — |€| j                   }| j                  }| j                  }| j                  }| j                  5 }|t
        j                  k(  r"|j                  ||j                  |«      «      }n|j                  ||«      }|st        d«      ‚|j                  ||t        |«      | j                  «      }|€3t        d| j                   › d| j                  j                  «       › �«      ‚	 d d d «       y # 1 sw Y   y xY w)Nz2Cannot save image of this format to this file typezCould not save file `z`: )r  r€  r‚  rÇ  r~  r4   rD   r  r  r  Ú	TypeErrorrï   r0   r�  r#   r\  )r  rk  rn  r‹  rÌ  r'   Ú	can_writer[  s           r   Úsave_to_filenamezFIBitmap.save_to_filename^  sõ   € ØÐØ—~‘~ˆHà—‘ˆØ—‘ˆØ—-‘-ˆà�X‰Xð 	˜àœ(×-Ñ-Ò-Ø×>Ñ>Ø˜3×/Ñ/°Ó7ó‘	ð  ×?Ñ?ÀÀwÓO�	ÙÜÐ TÓUÐUð ×$Ñ$ U¨F´C¸³MÀ4Ç;Á;ÓOˆCàˆ{Ü"Ø+¨D¯N©NÐ+;¸3¸t¿x¹x×?ZÑ?ZÓ?\Ð>]Ð^óð ð ÷	÷ 	ñ 	ús   ¿B1C:Ã:Dc                 ó8  — | j                  «       \  }}}| j                  ||d«      }| j                  5 }|j                  «       }d d d «       d„ }t	        |«      dk(  ršr˜|j
                  t        j                  k(  r{ ||d   «      } ||d   «      }	 ||d   «      }
|d   dk(  rt        j                  |
|	|f«      S |d   dk(  r$ ||d   «      }t        j                  |
|	||f«      S t        d|z  «      ‚ ||«      j                  «       }|S # 1 sw Y   ŒÌxY w)	NFc                 ó6  — | j                   dk(  r| d d d…   j                  S | j                   dk(  r| d d …d d d…f   j                  S | j                   dk(  r| d d …d d …d d d…f   j                  S | j                   dk(  r| d d …d d …d d …d d d…f   j                  S y )Nr5   rb  r   r6   r7   )ÚndimÚT©Úarrs    r   Únz"FIBitmap.get_image_data.<locals>.n§  s’   € à�x‰x˜1Š}Ø™4˜R˜4‘y—{‘{Ð"Ø—‘˜Q’Øš1™d ˜d˜7‘|—~‘~Ð%Ø—‘˜Q’Øš1ša¡ 2 ˜:‘×(Ñ(Ð(Ø—‘˜Q’Øš1ša¢¡D b D˜=Ñ)×+Ñ+Ð+ð r   r6   r   r5   r   r7   z Cannot handle images of shape %s)Ú_get_type_and_shapeÚ_wrap_bitmap_bits_in_arrayr~  rû   r  rÆ  rP   rQ   Údstackrf  r™  )r  r2   rÅ  rÍ  r´  r'   ÚislerÜ  ÚbÚgrd  Úas               r   Úget_image_datazFIBitmap.get_image_dataž  s  € Ø ×4Ñ4Ó6Ñˆˆu�cØ×/Ñ/°°u¸eÓDˆØ�X‰Xð 	2˜Ø×/Ñ/Ó1ˆD÷	2ò		,ô ˆu‹:˜Š?™t¨¯
©
´e·k±kÒ(AÙ�%˜‘(“ˆAÙ�%˜‘(“ˆAÙ�%˜‘(“ˆAØ�Q‰x˜1Š}Ü—|‘| Q¨¨1 IÓ.Ð.Ø�q‘˜Q’Ù�e˜A‘h“K�Ü—|‘| Q¨¨1¨a LÓ1Ð1ä Ð!CÀeÑ!KÓLÐLñ ˆe‹H�M‰M‹OˆØˆ÷A	2ð 	2ús   ´DÄDc                 óª  — t        |t        j                  «      sJ ‚|j                  }|j                  }| j
                  5 }|j                  «       }d d d «       |d d \  }}t        |«      dk(  rd}||f}	nt        |«      dk(  r|d   }|||f}	n|d   }d„ }
| j                  	|d«      }t        |«      dk(  r„r‚|j                  t        j                  k(  re|d d …d d …df   }|d d …d d …df   }|d d …d d …df   } |
|«      |d<    |
|«      |d<    |
|«      |d<   |d   dk(  r#|d d …d d …df   } |
|«      |d<   n |
|«      |d d  | j                  r| j                  |«       t        |«      dk(  r£|j                  t        j                  k(  r…| j
                  5 }|j                  | j                  «      }d d d «       t        j                   «      }|st#        d«      ‚	 t$        j                  j&                  }t        j,                  ||d
«       y y y # 1 sw Y   �ŒÇxY w# 1 sw Y   ŒmxY w# t(        $ r t$        j*                  d	   d   }Y ŒTw xY w)Nr   r5   r6   r   c                 ó&   — | d d d…   j                   S )Nrb  )rÙ  rÚ  s    r   rÜ  z"FIBitmap.set_image_data.<locals>.nÖ  s   € Ø‘t˜�t‘9—;‘;Ðr   Tr7   zCould not get image paletter§  rd   )r.  rP   rÄ  rÅ  r2   r~  rû   r  rÞ  rÆ  rQ   Ú_need_finishÚ_finish_wrapped_arrayrë   r‚  r#  rh  r#   ÚGREY_PALETTEr§  r1  Ú__array_interface__Úmemmove)r  r´  rÅ  r2   r'   rà  rd  rÊ  rË  Úw_shaperÜ  Úwrapped_arrayrÎ   rÏ   rÐ   rÑ   ÚpaletteÚpalette_datas                     r   Úset_image_datazFIBitmap.set_image_dataÃ  sJ  € ä˜%¤§¡Ô/Ð/Ð/Ø—‘ˆØ—‘ˆØ�X‰Xð 	2˜Ø×/Ñ/Ó1ˆD÷	2ð �R�aˆy‰ˆˆ1Üˆu‹:˜Š?ØˆJØ˜!�f‰GÜ�‹Z˜1Š_Ø˜q™ˆJØ! 1 aÐ(‰Gà˜q™ˆJò	ð ×7Ñ7¸ÀÈÓMˆô ˆu‹:˜Š?™t¨¯
©
´e·k±kÒ(AØ’aš˜A�g‘ˆAØ’aš˜A�g‘ˆAØ’aš˜A�g‘ˆAÙ  ›tˆM˜!ÑÙ  ›tˆM˜!ÑÙ  ›tˆM˜!ÑØ�Q‰x˜1Š}Øš!šQ ˜'‘N�Ù#$ Q£4�˜aÒ á  ›xˆM™!ÐØ×ÒØ×&Ñ& }Ô5äˆu‹:˜Š?˜uŸz™z¬U¯[©[Ò8Ø—‘ð A˜SØ×2Ñ2°4·<±<Ó@�÷Aä—o‘o gÓ.ˆGÙÜ"Ð#@ÓAÐAðKÜ+×2Ñ2×7Ñ7�ô �N‰N˜7 L°$Õ7ð  9ˆ?÷M	2ñ 	2ú÷NAð Aûô ò KÜ+×?Ñ?ÀÑGÈÑJ’ðKús*   ÁHÆH$Ç#H0 ÈH!È$H-È0IÉIc                 ó(  — | j                   5 }|j                  | j                  «      }|j                  | j                  «      }ddd«       |d   }|z  }|j                  }	t        |«      dk(  r|	|d   |	z  |f}
n|	|f}
t        j                  |z  j                  «      }	 d| _	        t        r
t        «       ‚t        j                  ||||
¬«      S # 1 sw Y   Œ�xY w# t        $ �r( |r d| _	        t        j                  ||¬«      cY S t        t!        |«      «      }t        j"                  ||¬«      j%                  «       }t        |«      dk(  r‡|j'                  |d	   |
d   |d   z  |d   «      }|d|d	   …d|d
   …d|d   …f   }t        j                  ||j(                  ¬«      }t+        |d   «      D ]  }|dd…dd…|f   j,                  ||<   Œ n3|j'                  |d
   |
d   «      }|d|d
   …d|d   …f   j,                  }|cY S w xY w)a  Return an ndarray view on the data in a FreeImage bitmap. Only
        valid for as long as the bitmap is loaded (if single page) / locked
        in memory (if multipage). This is used in loading data, but
        also during saving, to prepare a strided numpy array buffer.

        Nrb  r6   r   F)r2   ÚbufferÚstridesTr1   r   r5   )r~  r  r‚  rê   rÉ  r  r#  r’  r“  rç  ÚTEST_NUMPY_NO_STRIDESÚNotImplementedErrorrP   rÄ  Úzerosr”  r•  r˜  r™  Úreshaper2   ÚrangerÙ  )r  rÅ  r2   Úsaver'   ÚpitchÚbitsÚheightr¥  rÉ  ró  r§  rm  r´  Úarray2Úis                   r   rÞ  z#FIBitmap._wrap_bitmap_bits_in_arrayú  s  € ð �X‰Xð 	7˜Ø×*Ñ*¨4¯<©<Ó8ˆEØ×(Ñ(¨¯©Ó6ˆD÷	7ð
 �r‘ˆØ˜U‘Nˆ	Ø—>‘>ˆô ˆu‹:˜Š?Ø  q¡¨HÑ!4°eÐ<‰Gà Ð'ˆGô —‘ 	Ñ)×7Ñ7¸Ó=ˆð	Ø %ˆDÔÝ$Ü)Ó+Ð+Ü—=‘= ¨e¸DÈ'ÔRÐR÷+	7ð 	7ûô, #ó 	ñ Ø$(�Ô!Ü—{‘{ 5°Ô6Ò6äœ9 T›?Ó+�Ü×(Ñ(¨°5Ô9×>Ñ>Ó@�ä�u“: ’?Ø!ŸM™M¨%°©(°G¸B±KÀ5ÈÁ8Ñ4KÈUÐSTÉXÓV�EØ" : U¨1¡X :¨z°°q±¨z¸:¸UÀ1¹X¸:Ð#EÑF�FÜ!ŸK™K¨°U·[±[ÔA�EÜ" 5¨¡8›_ò 5˜Ø#)ª!ªQ°¨'¡?×#4Ñ#4˜˜ašñ5ð "ŸM™M¨%°©(°G¸B±KÓ@�EØ! * E¨!¡H *¨j°°a±¨jÐ"8Ñ9×;Ñ;�EØ’ð)	ús$   �7CÂ#/C ÃCÃ*HÄDHÈHc                 óô  — | j                   5 }|j                  | j                  «      }|j                  | j                  «      }|j	                  | j                  «      }ddd«       dz  |j
                  z  }|z  }||j                  d   z
  }d|cxk  rdk  sJ ‚ J ‚|j                  d   ||f}	t        j                  |	|j                  «      }
|dk(  r$|j                  |
dd…d|j                  d   …df<   n=t        |«      D ]/  }||dd…dd…f   j                  |
dd…d|j                  d   …|f<   Œ1 |
j                  d   d   }t        j                  ||
j                  «       ~
y# 1 sw Y   �ŒxY w)	z-Hardcore way to inject numpy array in bitmap.Nr;   éþÿÿÿr   r=   rb  r5   r§  )r~  r  r‚  rê   r  rÉ  rÅ  rP   rö  r2   rÙ  rø  rê  r#  rë  Únbytes)r  r´  r'   rú  rû  rÍ  Ú	nchannelsÚ	realwidthÚextraÚnewshaperý  rþ  Údata_ptrs                r   rè  zFIBitmap._finish_wrapped_array.  sh  € ð �X‰Xð 	5˜Ø×*Ñ*¨4¯<©<Ó8ˆEØ×(Ñ(¨¯©Ó6ˆDØ×&Ñ& t§|¡|Ó4ˆC÷	5ð
 ˜1‘H §¡Ñ.ˆ	Ø˜YÑ&ˆ	à˜EŸK™K¨™OÑ+ˆØ�EŒ˜BŠÐ‰Ðˆà—;‘;˜r‘? I¨yÐ8ˆÜ—‘˜X u§{¡{Ó3ˆØ˜Š>Ø.3¯g©gˆF’1Ð'˜Ÿ™ B™Ð'¨Ð*Ò+ä˜9Ó%ò C�Ø27¸º1ºa¸±.×2BÑ2B�’qÐ+˜EŸK™K¨™OÐ+¨QÐ.Ò/ðCð ×-Ñ-¨fÑ5°aÑ8ˆÜ�‰�t˜X v§}¡}Ô5Ù÷+	5ñ 	5ús   �AE-Å-E7c                 óü  — | j                   }| j                  5 }|j                  |«      }|j                  |«      }|j	                  |«      x| _        }|st        d«      ‚	 d d d «       d }t        j                     }|t        j                  k(  �r¡| j                  5 }|j                  |«      }|j                  |«      }d d d «       �r|dk(  rºj                  |«      }	t        j                  |	«      }	t        j                  dz  j!                  |	j"                  «      }
t%        j&                  |
t$        j(                  «      j+                  «       }
t,        |
k(  j/                  «       rg }t%        j0                  |«      |gz   |fS j3                  |«      }t        j                  |«      }| j5                  |«       | j7                  «       S |dk(  rg }nl|dk(  rdg}nc|dk(  rdg}nZj3                  |«      }t        j                  |«      }| j5                  |«       | j7                  «       S t        j8                  |   }t%        j0                  |«      |gz   |fS # 1 sw Y   �ŒxY w# 1 sw Y   �Œ±xY w)	NzUnknown image pixel typerc   rd   r;   é   r6   r`   r7   )r‚  r~  r
  r	  r  rÇ  rf  r4   rY   rD   r  r  rë   r#  rh  Úc_uint8r“  ÚvaluerP   r˜  rT   r™  ré  Úallr2   r  rŒ  rÝ  r[   )r  r‹  r'   re  ÚhrÌ  rÍ  r2   Úhas_palletterî  Úpr[   Ú	newbitmaps                r   rÝ  zFIBitmap._get_type_and_shapeH  sI  € Ø—‘ˆð �X‰Xð 	=˜Ø×&Ñ& vÓ.ˆAØ×'Ñ'¨Ó/ˆAØ&)×&@Ñ&@ÀÓ&HÐHˆDŒM˜GÙÜ Ð!;Ó<Ð<ð ÷		=ð ˆÜ—‘ Ñ(ˆà”h×)Ñ)Ó)Ø—‘ð C˜SØ×*Ñ*¨6Ó2�Ø"×:Ñ:¸6ÓB�÷Cò à 3Ò&Ø!×6Ñ6°vÓ>�GÜ$Ÿo™o¨gÓ6�GÜŸ™¨7Ñ3×AÑAÀ'Ç-Á-ÓP�AÜ×(Ñ(¨¬E¯L©LÓ9×>Ñ>Ó@�AÜ$¨Ñ)×.Ñ.Ô0Ø%'˜
Ü$Ÿ{™{¨5Ó1°:ÀÀAÀÑ3FÈÐKÐKà×9Ñ9¸&ÓA�	Ü"ŸO™O¨IÓ6�	Ø× Ñ  Ô+Ø×/Ñ/Ó1Ð1Ø˜’Ø‘
Ø˜’Ø˜S‘
Ø˜’Ø˜S‘
ð  ×9Ñ9¸&ÓA�	Ü"ŸO™O¨IÓ6�	Ø× Ñ  Ô+Ø×/Ñ/Ó1Ð1ä!×,Ñ,¨WÑ5ˆJô �{‰{˜5Ó! :°°A°Ñ#6¸Ð;Ð;÷_	=ñ 	=ú÷Cñ Cús   ™AI$Â#I1É$I.É1I;c                 óæ  — | j                   5 }|j                  | j                  ||dd«      }t        j                  |«      }|s3t        d| j                  ›d| j                   j                  «       ›�«      ‚t        | j                   | j                  | j                  | j                  «      }|j                  ||j                  |f«       | j                  |_        |cddd«       S # 1 sw Y   yxY w)z€Quantize the bitmap to make it 8-bit (paletted). Returns a new
        FIBitmap object.
        Only for 24 bit images.
        r   NzCould not quantize bitmap "rÐ  )r~  rú   r‚  r#  rh  rf  r  r\  rr  r€  r�  rŒ  r  rÇ  )r  Ú	quantizerÚpalettesizer'   r‹  Únews         r   ÚquantizezFIBitmap.quantize}  sÈ   € ð
 �X‰Xð 	˜à×2Ñ2Ø—‘˜i¨°a¸óˆFô —_‘_ VÓ,ˆFñ Ý à—~“~ t§x¡x×'BÑ'BÔ'DðFóð ô
 ˜4Ÿ8™8 T§^¡^°T·[±[À$Ç+Á+ÓNˆCØ�O‰O˜F S×%9Ñ%9¸6Ð$BÔCØŸ=™=ˆCŒLØ÷#	÷ 	ò 	ús   �CC'Ã'C0r+   )r   rc   )r@   rA   rB   ry  rÎ  rÑ  rÕ  rä  rð  rÞ  rè  rÝ  r  r\   r   r   rr  rr    s;   „ Ù+ò"EóHEóDò@#òJ58òn2òhò43<ôjr   rr  c                   ó2   — e Zd ZdZdd„Zdd„Zd„ Zd„ Zd„ Zy)	rw  z+Wrapper for the multipage FI bitmap object.Nc           	      ó¨  — |€| j                   }d}d}d}| j                  5 }|j                  | j                  t	        |«      |||| j
                  «      }t        j                  |«      }|s5| j                  j                  «       }t        d| j                   ›d|›�«      ‚| j                  ||j                  |f«       d d d «       y # 1 sw Y   y xY w)NFTúCould not open file "z" as multi-image: )r  r~  rò   r€  r0   r�  r#  rh  r\  rf  rŒ  ÚFreeImage_CloseMultiBitmap)r  rk  Ú
create_newÚ	read_onlyÚkeep_cache_in_memoryr'   Úmultibitmapr/  s           r   rÑ  z$FIMultipageBitmap.load_from_filename®  sÔ   € ØÐØ—~‘~ˆHð ˆ
Øˆ	Ø$Ðð �X‰Xð 	Y˜à×7Ñ7Ø—‘Ü�H“ØØØ$Ø—‘óˆKô !Ÿ/™/¨+Ó6ˆKñ Ø—h‘h×1Ñ1Ó3�Ý à—~“~¡sð,óð ð ×Ñ˜[¨3×+IÑ+IÈ;Ð*WÔX÷'	Y÷ 	Yñ 	Yús   ¡BCÃCc           	      ó”  — |€| j                   }d}d}d}| j                  5 }|j                  | j                  t	        |«      |||d«      }t        j                  |«      }|s5d| j                   ›d| j                  j                  «       ›�}t        |«      ‚| j                  ||j                  |f«       d d d «       y # 1 sw Y   y xY w)NTFr   r  z" for writing multi-image: )r  r~  rò   r€  r0   r#  rh  r\  rf  rŒ  r  )r  rk  r  r  r  r'   r  Úmsgs           r   rÕ  z"FIMultipageBitmap.save_to_filenameà  sË   € ØÐØ—~‘~ˆHð ˆ
Øˆ	Ø$Ðð �X‰Xð 	Y˜Ø×7Ñ7Ø—‘Ü�H“ØØØ$ØóˆKô !Ÿ/™/¨+Ó6ˆKò à—N“NØ—H‘H×/Ñ/Ô1ð�ô ! “oÐ%Ø×Ñ˜[¨3×+IÑ+IÈ;Ð*WÔX÷%	Y÷ 	Yñ 	Yús   ¡BB>Â>Cc                 ó|   — | j                   5 }|j                  | j                  «      cd d d «       S # 1 sw Y   y xY wr+   )r~  ÚFreeImage_GetPageCountr‚  )r  r'   s     r   Ú__len__zFIMultipageBitmap.__len__ÿ  s2   € Ø�X‰Xð 	<˜Ø×-Ñ-¨d¯l©lÓ;÷	<÷ 	<ò 	<ús   �2²;c                 óÖ  — | j                   5 }|j                  | j                  |«      }t        j                  |«      }|s3t        d|| j                  | j                   j                  «       fz  «      ‚t        | j                   | j                  | j                  | j                  «      }|j                  ||j                  | j                  |df«       |cddd«       S # 1 sw Y   yxY w)zlReturn the sub-bitmap for the given page index.
        Please close the returned bitmap when done.
        z%Could not open sub-image %i in %r: %sFN)r~  rô   r‚  r#  rh  rf  r  r\  rr  r€  r�  rŒ  ÚFreeImage_UnlockPage)r  Úindexr'   r‹  Úbms        r   Úget_pagezFIMultipageBitmap.get_page  sÅ   € ð �X‰Xð 	˜à×+Ñ+¨D¯L©L¸%Ó@ˆFÜ—_‘_ VÓ,ˆFÙÜ Ø;Ø˜dŸn™n¨d¯h©h×.IÑ.IÓ.KÐLñMóð ô ˜$Ÿ(™( D§N¡N°D·K±KÀÇÁÓMˆBØ�N‰NØ˜×1Ñ1°4·<±<ÀÈÐOôð ÷	÷ 	ò 	ús   �CCÃC(c                 ó’   — | j                   5 }|j                  | j                  |j                  «       ddd«       y# 1 sw Y   yxY w)z*Add a sub-bitmap to the multi-page bitmap.N)r~  ÚFreeImage_AppendPager‚  )r  r‹  r'   s      r   Úappend_bitmapzFIMultipageBitmap.append_bitmap  s<   € à�X‰Xð 	C˜à×$Ñ$ T§\¡\°6·>±>ÔB÷	C÷ 	Cñ 	Cús	   �'=½Ar+   )	r@   rA   rB   ry  rÑ  rÕ  r!  r&  r)  r\   r   r   rw  rw  «  s"   „ Ù5óYódYò><òó*Cr   rw  )NF)%ry  r!   r-   r#  r  ÚloggingrP   Úcorer   r   r   r   r   r	   r
   r   Ú	getLoggerr@   r$   rô  r   r   r)   r0   ÚarangerT   ré  Úobjectr4   r^   r»   rÇ   rç   r|  rr  rw  r   r\   r   r   ú<module>r/     s
  ðñó 
Û 
Û Û Û Û ÷	÷ 	ó 	ð 
ˆ×	Ñ	˜8Ó	$€àÐ ð 1Ø0Ø)Ø)Ø/Ø/ñÐ óò.#ò:1ð
 ˆu�|‰|˜A˜z¨:¸U¿\¹\ÔJ€ô;ˆvô ;ô|jˆvô jôZ
�fô 
ô)˜ô )ôXV?�ô V?ôrj5�6ô j5ôZ~ˆ|ô ~ôlqC˜ô qCñj ƒ[�r   