
    9i                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJ	r	J
r
JrJrJrJrJr  \R                   " \5      rSrSSSSS	S
S.rS"S jrS rS r\R0                  " SSS\R2                  S9r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\!5      r" " S  S!\!5      r#\ " 5       r$g)#zModule 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                     [        5       nU(       a-  U[        ;   a"  S[        U   -   n[        X0US9  S[        l        ggg)aQ  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       Z/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/imageio/plugins/_freeimage.pydownloadr   /   s>      >D**1$77eX +t    c                  N   [         R                  " SS5      n U (       a  U $ [        5       nU(       a   U[        ;   a   [	        S[        U   -   SS9$ gg! [
         a     g[         a    [        S5      e[         a(  n[        R                  [        U5      5         SnAgSnAff = f)z7Ensure we have our version of the binary freeimage lib.IMAGEIO_FREEIMAGE_LIBNr   F)autozNeed 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
2C

 >D**	#"<2DT2J#JQVWW +t ' 	  	#9   	#NN3q6""	#s   A 
B$B$<BB$c                 J    U R                  [        R                  " 5       5      $ N)encodesysgetfilesystemencoding)xs    r   efnr0   c   s    88C--/00r   i   i dtypec                   0   \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSr\\R$                  \\R&                  \\R(                  \\R*                  \	\R,                  \
\R.                  \\R0                  \\R2                  \\R&                  \\R&                  \\R.                  \\R.                  0r\R$                  S4\\R$                  S4\\R$                  S4\\R&                  S4\\R(                  S4\\R*                  S4\\R,                  S4\	\R.                  S4\
\R0                  S4\\R2                  S4\\R&                  S4\\R&                  S4\\R.                  S4\\R.                  S4\0r\/ \/ \/ \	/ \
/ \/ \/ \S/\S/\S/\S/0rSrg)FI_TYPESk   r      r                     	   
          N)__name__
__module____qualname____firstlineno__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__static_attributes__rA   r   r   r4   r4   k   s   KJJIJIIJKIJHI 	EKKELL5;;ELL5;;5==EMMU%%5<<ELL%--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A3QC1#A3Jr   r4   c                   h   \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrS	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"Sr#Sr$Sr%Sr&Sr'Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0Sr1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9Sr:Sr;Sr<Sr=Sr>Sr?Sr@SrASrBSrCSrDSrESrFSrGSrHSrISrJSrKSrLSrMSrNSrOSrPSrQSrRSrSSrTSrUSrVSrWSrXSrYg)IO_FLAGS   i   r   r6   r   r8   r<          @         i      i   i    i   i @  i   i   i   r7   r:   r=   rA   N)ZrB   rC   rD   rE   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_   rA   r   r   ra   ra      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   ra   c                   <    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrg)METADATA_MODELSi  r   r6   r   r7   r8   r9   r:   r;   r<   r=   rA   N)rB   rC   rD   rE   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_   rA   r   r   r   r     s6    MNNMIHLNr   r   c                      \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSr0 \\R,                  _\\R.                  _\\R0                  _\S\R0                  4S\R0                  4/_\\R2                  _\\R4                  _\\R2                  _\	\R6                  _\
\R,                  _\\R8                  _\\R:                  _\S\R:                  4S\R:                  4/_\\R<                  _\\R>                  _\\R0                  _\S\R,                  4S\R,                  4S\R,                  4S\R,                  4/_r Sr!g)METADATA_DATATYPEi#  r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@         rc         	numeratordenominatorRGBArA   N)"rB   rC   rD   rE   	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_IFD8rS   rT   rU   rW   uint64int64int8rV   rX   rY   rZ   r\   r_   rA   r   r   r   r   #  s   IJJIMJNKJNJKHLJKI5;;ELL 	5<< 	ell3mU\\5RS	
 	ELL 	U[[ 	5<< 	EJJ 	 	U[[ 	EKK 	+u{{3mU[[5QR 	EMM 	U]] 	%,,  	%++%++%++%++	
!Fr   r   c            	       H   \ rS rSrSr0 S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S	\R                  S4_S
\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_0 S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S\R                  S4_S \R                  S4_S!\R                  S4_S"\R                  S4_S#\R                  S4_S$\R                  S4_S%\R                  S4_E\R                  S4\R                  S4\R                  S4\R                  S4\R                  S4\R                  S4\R                  S4S&.Er	S' r
\S( 5       rS) rS* rS+ rS, rS- rS. rS/ rS0 rS1 rS2 rS7S3 jrS8S4 jrS8S5 jrS6rg)9	FreeimageiO  a  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                 L  ^  S T l         [        R                  " 5       T l        / T l        [
        R                  R                  S5      (       a  [        R                  nO[        R                  nU" S [        R                  [        R                  5      U 4S j5       nUT l        g )Nwinc                    > UR                  S5      nTR                  R                  U5        [        TR                  5      S:  a7  TR                  R	                  S5        [        TR                  5      S:  a  M6  g g )Nutf-8rg   r   )decode	_messagesappendlenpop)fifmessageselfs     r   error_handler)Freeimage.__init__.<locals>.error_handler  sY    nnW-GNN!!'*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__Freeimage.__init__  s    	 __&
  <<""5))))H''H 
$foo	6	& 
7	& ,r   c                 6   U R                   c   U R                  5         [	        U R                   [        5      (       a  [        U R                   5      eU R                   $ ! [         a/  nSU l         U =R                   [        U5      -  sl          S nANtS nAff = f)Nz+The freeimage library could not be loaded: )r   load_freeimageOSErrorr&   
isinstancer#   )r   errs     r   r'   Freeimage.lib  sv    99&##% dii%%tyy))yy  &I			SX%		&s   A 
B)%BBc                 >     U R                     g! [         a     gf = f)NFT)r'   	Exceptionr   s    r   has_libFreeimage.has_lib  s'    	HH   		s    
c                    Sn U R                  5         U R                  5         U R                  R                  5       R	                  S5      S:  a  SnU(       d*  [        5         U R                  5         U R                  5         U R                  R                  U R                  5        U R                  R                  5       R	                  S5      U l	        g! [
         a     Nf = f)zuTry 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  r3  r)   r   r-  lib_version)r   successs     r   r2  Freeimage.load_freeimage  s    
 	   " xx,,.55g>&H   "  	++D,?,?@8888:AA'J  		s   AC 
C%$C%c           	         SS/n/ SQn[        5       n[        5       nU(       aC  [        U   nU H4  nUR                  S[        R
                  R                  USU5      5        M6     [        R                  " SS 5      nUb  UR                  SU5         [        X!U5      u  puXpl        XPl        g ! [         a  n[        U5      S-   n	[        U	5      eS nAff = f)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   r3  r&   r   	lib_fname)
r   	lib_namesexact_lib_namesres_dirsr   r   dirr'   r5  err_msgs
             r   r=  Freeimage._load_freeimage  s     .1	
 !?~&t,E&&q"'',,sK*OP   ii/6?""1c*	#!/hGJC 	  	##h!JJG'""	#s   B/ /
C9CCc                     U R                   R                  5        H*  u  nu  p#[        U R                  U5      nX$l        X4l        M,     g r+   )_APIitemsgetattrr'   restypeargtypes)r   frT  rU  funcs        r   r>  Freeimage._register_api  s9    &*iioo&7"A"488Q'D"L$M '8r   c                 N    U R                   R                  5         U R                  $ r+   )r%  acquirer'   r9  s    r   	__enter__Freeimage.__enter__  s    

xxr   c                 X    U R                  5         U R                  R                  5         g r+   )_show_any_warningsr%  release)r   argss     r   __exit__Freeimage.__exit__  s    !

r   c                     / U l         g)zgReset the list of output messages. Call this before
loading or saving an image with the FreeImage API.
Nr  r9  s    r   
_reset_logFreeimage._reset_log  s     r   c                     U R                   (       a-  SR                  U R                   5      nU R                  5         U$ g)zGet 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  rH  re  )r   ress     r   _get_error_messageFreeimage._get_error_message  s/    
 >>((4>>*COOJ%r   c                     U R                   (       a7  [        R                  SU R                  5       -   5        U R	                  5         gg)zyIf 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%   rj  re  r9  s    r   r^  Freeimage._show_any_warnings&  s5     >>NN84;R;R;TTUOO r   c                 D    U R                    Vs/ s H  oPM     sn$ s  snf )zgReturn a list of the last 256 output messages
(warnings and errors) produced by the FreeImage library.
rd  )r   ms     r   get_output_logFreeimage.get_output_log.  s     
  >>*>a>***s   c                    U  nSnUS;  a  [        S5      eUS:X  a  Ub  UR                  [        R                  " U5      [	        U5      5      nUR                  [        R                  " U5      [	        U5      5      nUR                  [        R                  " U5      5        US:X  a?  [        R                  R                  U5      (       a  UR                  [        U5      S5      nUS:X  a  UR                  [        U5      5      nUS:X  a  [        SU-  5      eUS:X  a$  UR                  U5      (       d  [        S	U-  5      eUS:X  a$  UR                  U5      (       d  [        S
U-  5      eUsSSS5        $ ! , (       d  f       g= f)zGet 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!   rG  isfiler  r0   r  r
  r	  )r   filenamemodebbr'   ftypefimemorys          r   getFIFFreeimage.getFIF5  sL    SE4 !EFF
 s{>"778KSQSWUH??13r7E --fooh.GHRKRWW^^H%=%=55c(mQGE{88XG { !G(!RSSS%E%Ee%L%L !G(!RSSS%E%Ee%L%L !F!QRR; TTs   E.E;;
F	c                     [        XX#5      $ )zHcreate_bitmap(filename, ftype, flags=0)
Create a wrapped bitmap object.
)FIBitmapr   r|  r  flagss       r   create_bitmapFreeimage.create_bitmap[  s     55r   c                     [        XX#5      $ )z\create_multipage_bitmap(filename, ftype, flags=0)
Create a wrapped multipage bitmap object.
)FIMultipageBitmapr  s       r   create_multipage_bitmap!Freeimage.create_multipage_bitmapa  s     !>>r   )r-  r   r%  r  rI  r?  r+   )r   )rB   rC   rD   rE   __doc__r(  ry  r,  r+  rQ  r/  propertyr'   r:  r2  r=  r>  r[  ra  re  rj  r^  rp  r  r  r  r_   rA   r   r   r   r   O  s   ; 	6; 	&'>; 	foot4;  	$ 7!;" 	6#;$ 	 &//4!8%;& 	6';( 	6??D1);* 	6??D1+;, 	#V__d$;-;. 	$foot%</;0 	./F1;2 	v53;4 	$ 75;: 	$ 7;;< 	(&//4)@=;> 	%v&=?;@ 	&'>A;B 	$foot%<C;F 	#V\\4$8G;H 	%v&=I;J 	 &,,!5K;L 	$fllD%9M;N 	 &,,!5O;R 	t 4S;T 	!6<<"6U;V 	%v||T&:W;X 	&'>Y;\ 	't(<];^ 	't(<_;` 	't(<a;b 	*FLL$+?c;d 	)6<<*>e;f 	d3g;h  &||T2#)<<"6#\\40$*LL$#7&,oot%<%||T2#__d3u;Dz,6 	 	K4B%
&+$L6?r   r   c                   <    \ rS rSrS rS rS rS
S jrS rS r	S	r
g)FIBaseBitmapih  c                 P    Xl         X l        X0l        X@l        S U l        / U l        g r+   )_fi	_filename_ftype_flags_bitmap_close_funcs)r   r   r|  r  r  s        r   r/  FIBaseBitmap.__init__i  s%    !r   c                 $    U R                  5         g r+   )closer9  s    r   __del__FIBaseBitmap.__del__q  s    

r   c                    U R                   bW  U R                  (       aE  U R                   H&  n U R                     US   nU" USS  6   S S S 5        M(     / U l        S U l         g g g ! , (       d  f       MJ  = f! [         a     MZ  f = f)Nr   r6   )r  r  r  r8  )r   
close_funcfuns      r   r  FIBaseBitmap.closet  s    LL$$*;*;"//
(mZ^, " 0 !#DDL +<$ " ! s.   A8A&	A8&
A5	0A85A88
BBNc                     U R                   b   Uc"  U R                  R                  R                  U4nXl         U(       a  U R                  R                  U5        gg)zAFunction to set the bitmap and specify the function to unload it.N)r  r  r'   r  r  r  )r   bitmapr  s      r   _set_bitmapFIBaseBitmap._set_bitmap  sN    <<#66>J$$Z0 r   c           	      X   [         R                  R                  5        VVs/ s H$  u  pUR                  S5      (       d  M  USS  U4PM&     nnn[	        5       n[
        R                  " 5       nU R                   nU GH  u  prUR                  X R                  [
        R                  " U5      5      n[
        R                  " U5      nU(       d  MU  Sn	U	(       Ga  UR                  U5      R                  S5      n
UR                  U5      nUR                  U5      n[
        R                  U-  nUR!                  UR#                  U5      5      n[%        ['        U5      5      nUnU[(        R*                  :X  a  UR                  SS5      nOU[(        R,                  ;   ar  [(        R,                  U   n[.        (       a  [1        U[2        [4        45      (       a  O8 [6        R8                  " UUS9R;                  5       n[=        U5      S:X  a  US   nURA                  U[	        5       5      nUUU
'   URC                  U[
        R                  " U5      5      n	U	(       a  GM  URE                  U5        GM     UsS S S 5        $ s  snnf ! [>         a     Nf = f! , (       d  f       g = f)	NFIMD_r9   Tr  replacer1   r6   r   )#r   __dict__rR  r'  r   r(  ry  r  r   r  byrefr   r  r  r  c_charfrom_addressr   bytes	bytearrayr   r   r\   r   r4  listtuplerS   
frombuffercopyr  r8  
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_dataFIBaseBitmap.get_meta_data  sJ    !0 8 8 > > @
 @w' T!"Xv @ 	 
 6ooXX&,"
::LL&,,s*; "??848D#&#:#:3#?#F#Fw#O#&#;#;C#@$'$>$>s$C	#)==9#<'44S5N5Ns5ST$))D/$:	"+#'8'C'CC&/&6&6w	&JG%):)A)AA$5$<$<X$FE&w:edE]+K+K $!).3.>.>(1/&&*df %, (+7|q'829!* #+"5"5j$&"I,3)"==$fll3&7 ? $H 33H=[ '-` e X
\ (1 !)$(!)I XsJ   JJ;AJD
J7JAJ$J
JJJJ
J)c                    0 n[         R                  R                  5        H$  u  p4UR                  S5      (       d  M  XBUSS  '   M&     S nU R                   nUR                  5        GH  u  pxUR                  US 5      nUc  M  UR                  5        GH  u  pUR                  5       n[        R                  " U5      n Sn[        U
[        5      (       a   U
R                  S5      nSnU(       a  [        R                  n[        W5      nO[!        U
S5      (       d  ["        R$                  " U
/5      n
U" U
R&                  5      nUc,  [(        R+                  SU	-  5         UR-                  U5        M  U
R/                  5       nU
R0                  nUR3                  XR                  S	5      5        UR5                  X5        UR7                  X5        UR9                  U[        U5      5        UR;                  X5        UR=                  U5      nUR?                  X@R@                  UU5        UR-                  U5        GM     GM     S S S 5        g ! [         a     GNuf = f! [B         aL  n[(        R+                  S
U	< SU R                  RE                  5       < S[        U5      < 35         S nANS nAff = f! UR-                  U5        f = f! , (       d  f       g = f)Nr  r9   c                 d    [         R                  R                  5        H  u  pX:X  d  M  Us  $    g r+   )r   r\   rR  )r2   r  numpy_dtypes      r   get_tag_type_number7FIBaseBitmap.set_meta_data.<locals>.get_tag_type_number  s/    '8'?'?'E'E'G#'!M (H 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  rR  r'  r  getr   r(  ry  r4  r&   r,   UnicodeErrorr   r   r  hasattrrS   arrayr2   r$   r%   FreeImage_DeleteTagtobytessizeFreeImage_SetTagKeyFreeImage_SetTagTypeFreeImage_SetTagCountFreeImage_SetTagLengthFreeImage_SetTagValuer   FreeImage_SetMetadatar  r8  rj  )r   r  r  r  r  r  r'   r  r  r  r  r  is_asciir  r  	tag_counttag_keyr5  s                     r   set_meta_dataFIBaseBitmap.set_meta_data  sn   +44::<LDw''#)tABx  =
	 XX'/~~'7#
J5>)0%H113C //#.C)5#(%gs33%,3NN7,C	+/ $'8'C'CH(+II#*7G#<#<*/++wi*@':7=='IH'/ &%@BJ%K!" !)( //4' )0(9I(/I//__W5MN00?11#A223IG11#A"%"9"9#">11&,,QTU //4] *9 (8 X& $0 % $%6 %   ()D)D)FCR  //4k Xsv   A*KI'I.A8I''K:B8I'2K
I$	 I'#I$	$I''
J=	1AJ8	3K 8J=	=K  K	K
K$)r  r  r  r  r  r  r+   )rB   rC   rD   rE   r/  r  r  r  r  r  r_   rA   r   r   r  r  h  s#    
 	1AFD5r   r  c                   Z    \ rS rSrSrS rSS jrSS jrS rS r	S	 r
S
 rS rSS jrSrg)r  i  z!Wrapper for the FI bitmap object.c           
         [        U[        R                  5      (       d   eUR                  nUR                  nUS S u  pE[        U5      S:X  a  SnO[        U5      S:X  a  US   nOUS   n [        R                  UR                  U4   nXpl	        U R                   nSUR                  -  U-  n	UR                  XuXISSS5      n
[        R                   " U
5      n
U
(       d&  [#        SU R                  R%                  5       -  5      eU R'                  XR(                  U
45        S S S 5        g ! [         a    [        S5      ef = f! , (       d  f       g = f)Nr   r6   r7   r   z,Cannot write arrays of given type and shape.r<   z)Could not allocate bitmap for storage: %s)r4  rS   ndarrayshaper2   r  r4   r]   type_fi_typeKeyErrorrw  r  itemsizer   r(  ry  r#   rj  r  r  )r   r  r  r2   ru  c
n_channelsfi_typer'   bppr  s              r   allocateFIBitmap.allocate  sB   %//// Rayu:?JZ1_qJqJ	M''Z(@AG#M
 XXenn$z1C,,WAqIF__V,F "?hh1134  V&:&:F%CD X	  	MKLL	M Xs   .%D0 BE	0E	
ENc                    Uc  U R                   nU R                   nUR                  U R                  [	        U5      U R
                  5      n[        R                  " U5      nU(       d5  [        SU R                   < SU R                  R                  5       < 35      eU R                  X2R                  U45        S S S 5        g ! , (       d  f       g = f)NzCould not load bitmap "": )r  r  r   r  r0   r  r(  ry  rw  rj  r  r  )r   r|  r'   r  s       r   load_from_filenameFIBitmap.load_from_filename<  s    ~~HXX''S]DKKPF__V,F  ~~txx'B'B'DF  V&:&:F%CD XXs   B C
Cc                     Uc  U R                   nU R                  nU R                  nU R                  nU R                   nU[
        R                  :X  a!  UR                  X%R                  U5      5      nOUR                  X$5      nU(       d  [        S5      eUR                  X#[        U5      U R                  5      nUc3  [        SU R                    SU R                  R                  5        35      e S S S 5        g ! , (       d  f       g = f)Nz2Cannot save image of this format to this file typezCould not save file `z`: )r  r  r  r  r  r4   rG   r  r  r  	TypeErrorr   r0   r  r#   rj  )r   r|  r  r  r  r'   	can_writeri  s           r   save_to_filenameFIBitmap.save_to_filename^  s    ~~H--XX(--->>//7	  ??O	 TUU $$UCM4;;OC{"+DNN+;3txx?Z?Z?\>]^   XXs    B5C??
Dc                 N   U R                  5       u  pnU R                  X!S5      nU R                   nUR                  5       nS S S 5        S n[	        U5      S:X  a  W(       a  UR
                  [        R                  :X  a|  U" US   5      nU" US   5      n	U" US   5      n
US   S:X  a  [        R                  " XU45      $ US   S:X  a#  U" US   5      n[        R                  " XX45      $ [        SU-  5      eU" U5      R                  5       nU$ ! , (       d  f       N= f)	NFc                 >   U R                   S:X  a  U S S S2   R                  $ U R                   S:X  a  U S S 2S S S24   R                  $ U R                   S:X  a  U S S 2S S 2S S S24   R                  $ U R                   S:X  a  U S S 2S S 2S S 2S S S24   R                  $ g )Nr6   rs  r   r7   r8   )ndimTarrs    r   n"FIBitmap.get_image_data.<locals>.n  s    xx1}4R4y{{"Q1dd7|~~%Q1a2:(((Q1aDbD=)+++ r   r7   r   r6   r   r8   z Cannot handle images of shape %s)_get_type_and_shape_wrap_bitmap_bits_in_arrayr  r   r  r  rS   rT   dstackrw  r  )r   r2   r  r  r  r'   isler  bgru  as               r   get_image_dataFIBitmap.get_image_data  s    446c//eDXX//1D 		, u:?t

ekk(A%(A%(A%(AQx1}||Q1I..qQeAhK||Q1L11 !Ce!KLL eHMMOA Xs   D
D$c                    [        U[        R                  5      (       d   eUR                  nUR                  nU R
                   nUR                  5       nS S S 5        US S u  pg[        U5      S:X  a  SnXv4n	O[        U5      S:X  a
  US   nXU4n	OUS   nS n
U R                  W	US5      n[        U5      S:X  a  W(       a  UR                  [        R                  :X  af  US S 2S S 2S4   nUS S 2S S 2S4   nUS S 2S S 2S4   nU
" U5      US'   U
" U5      US'   U
" U5      US'   US   S:X  a  US S 2S S 2S4   nU
" U5      US'   OU
" U5      US S & U R                  (       a  U R                  U5        [        U5      S:X  a  UR                  [        R                  :X  a  U R
                   nUR                  U R                  5      nS S S 5        [        R                   " W5      nU(       d  [#        S5      e [$        R                  R&                  n[        R,                  " UUS
5        g g g ! , (       d  f       GN= f! , (       d  f       N~= f! [(         a    [$        R*                  S	   S   n N`f = f)Nr   r6   r7   r   c                 &    U S S S2   R                   $ )Nrs  )r  r  s    r   r  "FIBitmap.set_image_data.<locals>.n  s    tt9;;r   Tr8   zCould not get image paletter  rh   )r4  rS   r  r  r2   r  r   r  r  r  rT   _need_finish_finish_wrapped_arrayr   r  r(  ry  r#   GREY_PALETTEr  r8  __array_interface__memmove)r   r  r  r2   r'   r  ru  r  r  w_shaper  wrapped_arrayr   r   r   r   palettepalette_datas                     r   set_image_dataFIBitmap.set_image_data  s4   %////XX//1D  Rayu:?JfGZ1_qJ!a(GqJ	 77M u:?t

ekk(AaAgAaAgAaAgA tM! tM! tM!Qx1}!Q'N#$Q4a  xM!&&}5u:?uzzU[[8S224<<@ oog.G"#@AAK+2277 NN7L$7  9?M XN   K+??GJKs*   H1/I<I 1
I 
I I76I7c                    U R                    nUR                  U R                  5      nUR                  U R                  5      nSSS5        US   nUW-  nUR                  n	[        U5      S:X  a  XS   U	-  U4n
OX4n
[        R                  U-  R                  W5      n SU l	        [        (       a
  [        5       e[        R                  " XXS9$ ! , (       d  f       N= f! [         Ga    U(       a  SU l	        [        R                  " XS9s $ [        [!        U5      5      n[        R"                  " XS9R%                  5       n[        U5      S:X  a|  US	   U
S   US   -  US   4Ul        USUS	   2SUS
   2SUS   24   n[        R                  " XR(                  S9n[+        US   5       H  nUSS2SS2U4   R,                  X'   M     O*US
   U
S   4Ul        USUS
   2SUS   24   R,                  nUs $ f = f)zReturn 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.

Nrs  r7   r   F)r2   bufferstridesTr1   r   r6   )r  r  r  r   r  r  r(  r  r  r  TEST_NUMPY_NO_STRIDESNotImplementedErrorrS   r  zerosr  r  r  r  r  r2   ranger  )r   r  r2   saver'   pitchbitsheightr  r  r  r  r~  r  array2is                   r   r  #FIBitmap._wrap_bitmap_bits_in_array  s    XX**4<<8E((6D 
 rUN	>> u:?qH!4e<G'G 	)77=	 %D$$)++==DRR+ X, # 	 $(!{{5669T?+((9>>@u:?"'(GBK58,CU1X"MEK":U1X:zqz:U1X:#EFF!KK[[AE"58_#)!Q'?#4#4 - #((GBK"7EK!*E!H*jaj"89;;E)	s$   7C"0C$ 
C!$-HC-HHc                    U R                    nUR                  U R                  5      nUR                  U R                  5      nUR	                  U R                  5      nSSS5        WS-  UR
                  -  nWU-  nXqR                  S   -
  nSUs=::  a  S:  d   e   eUR                  S   Xv4n	[        R                  " XR                  5      n
US:X  a$  UR                  U
SS2SUR                  S   2S4'   O>[        U5       H/  nXSS2SS24   R                  U
SS2SUR                  S   2U4'   M1     U
R                  S   S   n[        R                  " WXR                  5        A
g! , (       d  f       GN= f)	z-Hardcore way to inject numpy array in bitmap.Nr<   r   r>   rs  r6   r  )r  r  r  r   r  r  r  rS   r  r2   r  r  r  r(  r  nbytes)r   r  r'   r  r  r  	nchannels	realwidthextranewshaper  r  data_ptrs                r   r	  FIBitmap._finish_wrapped_array.  sO    XX**4<<8E((6D&&t||4C 
 1H.	Y&	KKO+EB;;r?I8X{{3>.3ggF1'B'*+9%271a.2B2Bq+EKKO+Q./ & --f5a8tX}}5+ Xs   AE//
E>c                 D   U R                   nU R                   nUR                  U5      nUR                  U5      nUR	                  U5      =U l        nU(       d  [        S5      e S S S 5        S n[        R                  W   nU[        R                  :X  Ga  U R                   nUR                  U5      nUR                  U5      nS S S 5        W(       Ga  US:X  a  WR                  U5      n	[        R                  " U	5      n	[        R                  S-  R!                  U	R"                  5      n
[$        R&                  " U
[$        R(                  5      R+                  5       n
[,        U
:H  R/                  5       (       a   / n[$        R0                  " U5      UWW/-   U4$ WR3                  U5      n[        R                  " U5      nU R5                  U5        U R7                  5       $ US:X  a  / nOoUS:X  a  S/nOeUS:X  a  S/nO[WR3                  U5      n[        R                  " U5      nU R5                  U5        U R7                  5       $ [        R8                  U   n[$        R0                  " U5      UWW/-   U4$ ! , (       d  f       GN= f! , (       d  f       GN= f)	NzUnknown image pixel typerg   rh   r<      r7   rd   r8   )r  r  r  r  r  r  rw  r4   r\   rG   r  r  r   r(  ry  c_uint8r  valuerS   r  rW   r  r
  allr2   r  r  r  r^   )r   r  r'   rv  hr  r  r2   has_palletter  pr^   	newbitmaps                r   r  FIBitmap._get_type_and_shapeH  s8    XX&&v.A''/A&)&@&@&HHDMG !;<< 	  (h)))S**62"::6B  3&!66v>G$oog6G73AA'--PA((ELL9>>@A$)..00%'
${{51:A3FKK99&A	"OOI6	  +//11
S
S
  99&A	"OOI6	  +//11!,,W5J {{5!:A#6;;_ X s   AI>%#J>
J
Jc                    U R                    nUR                  U R                  XSS5      n[        R                  " U5      nU(       d5  [        SU R                  < SU R                   R                  5       < 35      e[        U R                   U R                  U R                  U R                  5      nUR                  XCR                  U45        U R                  Ul        UsSSS5        $ ! , (       d  f       g= f)zhQuantize 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(  ry  rw  r  rj  r  r  r  r  r  r  )r   	quantizerpalettesizer'   r  news         r   quantizeFIBitmap.quantize}  s    
 XX22iaF __V,F  ~~txx'B'B'DF 
 488T^^T[[$++NCOOF%9%96$BC==CL# XXs   CC--
C;)r  r  r+   )r   rg   )rB   rC   rD   rE   r  r  r  r  r  r  r  r	  r  r8  r_   rA   r   r   r  r    s;    +"EHED@#J58n2h43<jr   r  c                   >    \ rS rSrSrS
S jrS
S jrS rS rS r	S	r
g)r  i  z+Wrapper for the multipage FI bitmap object.Nc           	         Uc  U R                   nSnSnSnU R                   nUR                  U R                  [	        U5      UUUU R
                  5      n[        R                  " U5      nU(       d7  U R                  R                  5       n[        SU R                   < SU< 35      eU R                  XeR                  U45        S S S 5        g ! , (       d  f       g = f)NFTCould not open file "z" as multi-image: )r  r  r   r  r0   r  r(  ry  rj  rw  r  FreeImage_CloseMultiBitmap)r   r|  
create_new	read_onlykeep_cache_in_memoryr'   multibitmapr5  s           r   r  $FIMultipageBitmap.load_from_filename  s    ~~H 
	$ XX77H$K !//+6K hh113 ~~s,  [+I+I;*WX' XXs   B%C
Cc           	         Uc  U R                   nSnSnSnU R                   nUR                  U R                  [	        U5      UUUS5      n[
        R                  " U5      nU(       d7  SU R                   < SU R                  R                  5       < 3n[        U5      eU R                  XeR                  U45        S S S 5        g ! , (       d  f       g = f)NTFr   r<  z" for writing multi-image: )r  r  r   r  r0   r(  ry  rj  rw  r  r=  )r   r|  r>  r?  r@  r'   rA  msgs           r   r  "FIMultipageBitmap.save_to_filename  s    ~~H 
	$ XX77H$K !//+6K NNHH//1 !o%[+I+I;*WX% XXs   BC
Cc                     U R                    nUR                  U R                  5      sS S S 5        $ ! , (       d  f       g = fr+   )r  FreeImage_GetPageCountr  )r   r'   s     r   __len__FIMultipageBitmap.__len__  s'    XX--dll; XXs	   2
A c                    U R                    nUR                  U R                  U5      n[        R                  " U5      nU(       d2  [        SXR                  U R                   R                  5       4-  5      e[        U R                   U R                  U R                  U R                  5      nUR                  X2R                  U R                  US45        UsSSS5        $ ! , (       d  f       g= f)z\Return 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(  ry  rw  r  rj  r  r  r  r  FreeImage_UnlockPage)r   indexr'   r  bms        r   get_pageFIMultipageBitmap.get_page  s     XX++DLL%@F__V,F ;nndhh.I.I.KLM  $((DNNDKKMBNN114<<O  XXs   CC##
C1c                     U R                    nUR                  U R                  UR                  5        SSS5        g! , (       d  f       g= f)z*Add a sub-bitmap to the multi-page bitmap.N)r  FreeImage_AppendPager  )r   r  r'   s      r   append_bitmapFIMultipageBitmap.append_bitmap  s-    XX$$T\\6>>B XXs	   '=
ArA   r+   )rB   rC   rD   rE   r  r  r  rH  rN  rR  r_   rA   r   r   r  r    s"    5YdY><*Cr   r  )NF)%r  r!   r-   r(  r#  loggingrS   corer   r   r   r   r   r	   r
   r   	getLoggerrB   r$   r  r   r   r)   r0   arangerW   r
  objectr4   ra   r   r   r   r  r  r  r   rA   r   r   <module>rY     s   
 
    	 	 	 
		8	$  10))// .#:1
 ||Az:U\\J;v ;|jv jZ
f 
) )XV? V?rj56 j5Z~| ~lqC qCj [r   