o
    "j                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ dZdZd	Zd Zd
ZdZdZdZdZdZdZd
d
dddd
d
ddddddZh dZd
ddddZ h dZ!eG dd de	Z"ee#e$ej%f Z&ee&ee"f Z'G dd deZ(de'fddZ)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/d(d) Z0d*d+ Z1d,d- Z2d.d/ Z3d0d1 Z4d2d3 Z5d4d5 Z6d6d7 Z7d8d9 Z8d:d; Z9d<d<d<d<d<d=de'd>e:d?e:d@e:dAe:dBe:dCe(fdDdEZ;d<dFde'dAe:dCe
e<e<f fdGdHZ=de'dCe
e<e<f fdIdJZ>dS )K    N)Decimal)BinaryIO
NamedTupleProtocolTupleUnionruntime_checkable)urlparse)urlopen)ElementTree                     )r   r   r   r   r   r      r   	   
         >   s   heics   hevcs   heixs   mif1s   msf1s   hevxs   aviss   avif)r   r   r   r   >            c                   @   s8   e Zd ZddedefddZddededefd	d
ZdS )ReadSeekBinaryr   sizereturnc                 C      d S N )selfr   r#   r#   T/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/imagesize/imagesize.pyread9      zReadSeekBinary.readr   offsetwhencec                 C   r!   r"   r#   )r$   r(   r)   r#   r#   r%   seek<   r'   zReadSeekBinary.seekN)r   )r   )__name__
__module____qualname__intbytesr&   r*   r#   r#   r#   r%   r   7   s    r   c                   @   sb   e Zd ZU dZeed< dZeed< dZeed< dZeed< dZ	eed< dZ
eed< dZeed< d	S )
	ImageInfor   widthheightrotationxdpiydpicolorschannelsN)r+   r,   r-   r1   r.   __annotations__r2   r3   r4   r5   r6   r7   r#   r#   r#   r%   r0   D   s   
 r0   filepathc                 C   sv   t | tr	| dfS t | tr4t| }|jdv r4t| }t| dfW  d    S 1 s/w   Y  t	| ddfS )NF)httphttpsTrb)

isinstancer   strr	   schemer
   ioBytesIOr&   open)r9   parsedresponser#   r#   r%   
_open_fileN   s   



 rE   c                 C   s   |t krt| d d S |tkrt| d d S |tkr$t| d d S |tkr0t| d d S |tkr<t| d d S |tkrHt| d d S |tkrTt| d d S |tkr\| d	 S |t	krd| d
 S |t
krl| d S | S )Ng5B>g      ?gti0?gd?g
F%u?gK7A?gRQ@gffffff9@   i	  i8c  )_UNIT_KMr.   
_UNIT_100M	_UNIT_10M_UNIT_1M
_UNIT_10CM_UNIT_CM_UNIT_MM_UNIT_0_1MM_UNIT_0_01MM_UNIT_UM)Zdensityunitr#   r#   r%   _convertToDPIY   s*   rR   c                 C   s   t d| }|std|  | \}}t|}|dkr t|S |dkr0t|td td S |dkr@t|td td S |d	krLt|td S |d
kr\t|td td S |dkrlt|td td S |dkrtt|S td| )Nz(\d+(?:\.\d+)?)?([a-z]*)$zunknown length value: %s cmZ96z2.54mmz25.4inZpc6ptZ72Zpxzunknown unit type: %s)rematch
ValueErrorgroupsr   float)valueZmatchedlengthrQ   r#   r#   r%   _convertToPxq   s(   r`   c              	      sz  d}d}|  d | d}t|}|dkr<|d d dv r<ztd|dd \}}W ||fS  tjy;   tdw |d	krk|d
rk|dd dkrkztd|dd	 \}}W ||fS  tjyj   tdw |dkr|d
rztd|dd \}}W ||fS  tjy   tdw |dkr|drz|  d t|  |  dd td| d\}}W ||fS  tjtfy   tdw |dkr|dr|  d ztd| d\}}W ||fS  tjy   tdw |dkrM|dd dkrMtd|d d d }|dk rtd|  d | |d  t	 fddt
D rIt| \}}}}|dkrE|dkrE||fS td||fS |dkr|drtd|dd d }|  | td | dd }t|D ]V}	td!| d\}
}}}|
d"kr|d#krt|d$ }n)|dkr|}n!td%|
d&kr|d#krt|d$ }n|dkr|}ntd'|dkr|dkr nqx|dks|dkrtd(||fS |dkrJ|d)rJtd*|dd d }|  | td+| dd }t|D ]+}	td,| d\}
}}}|
d"kr#|}n|
d&kr*|}|dkr6|dkr6 nq|dksB|dkrFtd(||fS |dkr|d-rtd*|dd d }|dkrmtd.|td/|dd d }|  | td/| dd }t|D ]+}	td0| d1\}
}}}|
d"kr|}n|
d&kr|}|dkr|dkr nq|dks|dkrtd2||fS |d3kr|d4s|d5r|  d | d6}z|d7}td8|d}td9|d}W n ty   td:w t|}t|}||fS |d d d;kr|dd d<v r|  d g }	 | d}| r>q1|d>krGtd?|d@krR|   q1| s[tdA|}| d}| ru||7 }| d}| sg|t| t|dkrn	|  dtj q2|\}}||fS |dBr'|dd dCkr'|dd dDkrtdE|dFdG \}}||fS |dd dHkrtdI|d	dJ dK d d }tdI|dJdG dK d d }||fS |dd dLkr#|dMdN }|d dO@ d> |d B d }|d# dP@ d> |d d> B |d dQ@ d? B d }||fS tdR|dSr9tdT|dUdF \}}||fS )VNr   r   @   r   r   s   GIF87as   GIF89az<hhzInvalid GIF file      PNG

r         IHDR>LLInvalid PNG filer   r      r   z>HHr   Invalid JPEG file      jP  

0   Invalid JPEG2000 files   ftyp>LzInvalid HEIF filec                 3   s    | ]}| v V  qd S r"   r#   ).0ZbrandZftyp_payloadr#   r%   	<genexpr>   s    z_get_size.<locals>.<genexpr>   MM *>Hz>HHLL   r      z?Invalid TIFF file: width column data type should be SHORT/LONG.i  z@Invalid TIFF file: height column data type should be SHORT/LONG.z?Invalid TIFF file: width and/or height IDS entries are missing.   II* z<L<Hz<HHLL   II+ z@Invalid BigTIFF file: Expected offset to be 8, found {} instead.z<Qz<HHQQ   zBInvalid BigTIFF file: width and/or height IDS entries are missing.r   s   <?xmls   <svgi   zutf-8z[^-]width="(.*?)"z[^-]height="(.*?)"zInvalid SVG file   Ps   123456T    zInvalid Netpbm file   #z&Invalid character found on Netpbm files   RIFFs   WEBPs   VP8 z<HH      s   VP8Xz<I       s   VP8L      ?         zUnsupported WebP file   BMz<ll   )r*   r&   lenstructunpackerrorr[   
startswith_seek_to_jpeg_sofany_HEIF_BRANDS_read_heif_metadataranger.   formatdecoderY   searchgroup	Exceptionr`   isspacereadlineisdigitappendosSEEK_CUR)fhandler2   r1   headr   Z	ftyp_size_r(   ZifdsizeitagdatatypecountdataZbytesize_offsetsizesZnext_chrbr#   rp   r%   	_get_size   sl  

 ' " !   
  
 	 

z






a


S



A"


4$









  
0r   c                 C   s   |  d | d}|dsdS 	 | d}|s	 dS |dkr.| d}|dkr*n|dks q|r5|dv r8	 dS ztd	| dd }W n tjyP   Y dS w |dk rX	 dS | |d }|d
ksh|dsiqt|dd  S )Nr   r   ri   r   Tr      )      rs         Exif  r   )r*   r&   r   r   r   r   #_read_orientation_from_exif_payload)r   r   Zmarker_startZmarker_codesegment_sizepayloadr#   r#   r%   _read_jpeg_exif_rotation=  s>   





r   c                 C   sj   |  d}|dkr|  d}|dks	|std|d }td|  dd d }|dk r1td||fS )Nr   r   zUnexpected end of JPEG filer   rs   r   zInvalid JPEG segment size)r&   r[   r   r   )r   Zmarker_bytemarkerr   r#   r#   r%   _read_jpeg_segment_headera  s   

r   c                 C   sh   d}d}d|  krdkrn n|t vs0| |d t| \}}d|  kr*dkrn q|t vr||fS )Nr   r   r      r   )_JPEG_NO_SOF_MARKERSr*   r   )r   
block_sizer   r#   r#   r%   r   n  s     r   c              	   C   sz  t | dk rdS | d d }|dkrd}n	|dkrd}ndS zt|d | d	d d
 }W n tjy9   Y dS w |d t | krDdS zt|d | ||d  d
 }W n tjya   Y dS w |d }t|D ]P}|d t | krw dS zt|d | ||d  \}}}	}
W n tjy   Y  dS w |dkr|dkr|	dkr|dkrt|
d   S |
d@   S |d7 }qjdS )Nr   r   r   s   II<s   MM>Lr   r   Hr   ZHHLL  r   r   ru   i  )r   r   r   r   r   r.   )Z	exif_dataZendian_tokenendianZfirst_ifd_offsetZ	ifd_countcursorr   r   r   r   r^   r#   r#   r%   r   w  sB    $($
r   c                 C   sl   t | \}}}}|dkr|S |dkr|S | d |  }d}||}|dkr*dS t||t| d  S )Nr   r   r   )r   r*   r&   findr   r   )r   r   Zproperty_rotationexif_rotationr   r   startr#   r#   r%   _read_heif_exif_rotation  s   

r   c                 c   s    |}|d |krit d| ||d  d }| |d |d  }d}|dkrB|d |kr/d S t d| |d |d  d }d}n|dkrJ|| }||k sT|| |krVd S ||||fV  ||7 }|d |ks	d S d S )Nr   rn   r   r   r   re   z>Q)r   r   )r   r   endr(   r   box_typeheader_sizer#   r#   r%   _iter_iso_boxes  s$    r   c           <      C   s	  |  d |  }d }t|dt|D ]\}}}}|dkr$|||f} nq|d u r+dS |\}}}	||	 d }
|| }d }g }i }i }i }t||
|D ]\}}}}|| }|| }|dkr|| }|dkr||d |kr|td||d |d  d }qJ|dkr|d |krtd	||d |d  d }qJ|d
kr~|d |kr~|| }|dkrtd||d |d  d }|d }n|d |krqJtd	||d |d  d }|d }t|D ]}|d |kr ntd	|||d  d }||d |d  }|| }|dk s||kr nl|dkrz|d |krz|d }|| }|dkrP|d |krPtd||d |d  d }||d |d  }|||< n*|dkrz|d |krztd	||d |d  d }||d |d  }|||< |}qqJ|dkr|d |kr|| }|d }|d |krqJ|| d? }|| d@ }|d7 }|| d? } |dv r|| d@ nd}!|d7 }|dk r|d |krqJtd|||d  d }"|d7 }n|d |krqJtd	|||d  d }"|d7 }t|"D ]}|dk r"|d |kr ntd|||d  d }|d7 }n|d |kr+ ntd	|||d  d }|d7 }|dv rO|d |krK n|d7 }|d |krX n|d7 }||  |kre n| rtt||||   dnd}#|| 7 }|d |kr nxtd|||d  d }$|d7 }g }%t|$D ]V}|dv r|!r||! |kr nD||!7 }|| | |kr n5|rt||||  dnd}&||7 }|rt||||  dnd}'||7 }|%	|#|& |'f q|%r|%||< qqJ|dkrt|||D ]\}(})}*}+|(|+ },|(|) }-|*dkr$t
t||,|-}q|*dkr|,d |-krt||,d |,d  d}.t|.d@ }/|,d }|d |-krQqtd	|||d  d }|d7 }t|D ]s}|d |-krr nitd|||d  d }|d7 }|| }0|d7 }g }1t|0D ]B}|/r|d |-kr n5td|||d  d }2|d7 }|1	|2d@  q|d |-kr n|| }2|d7 }|1	|2d@  q|1||< qgqqJ|sdS ||t
tdt|d }3d }4 }5 }6}7|3D ]\}8d|8  krt|ksn q||8d  \}(})}*}+|(|+ },|*dkr=|,d |(|) kr=td||,d |,d  \}4}5q|*dkrW|,d |(|) krWt||,d  d@ d}6q| D ]f\}}|d krhq]||g D ]L\}&}'|'dk ryqn|&|' }9|&dk s|9t|krqn||&|9 }:dtd	|:d d d  };|;d t|:krqnt|:|;d  }7|7dkr nqn|7dkr nq]|4|5|6|7fS )!Nr   s   meta)r   r   r   r   r   s   pitmr   rs   r   rn   s   iinfs   infe   r   r   r   re   s   ilocr   r   )r   r   bigs   iprps   ipcos   ipmai     r   s   isperg   s   irotr   s   Exif)r*   r&   r   r   r   r   r   r.   
from_bytesr   listboolget_HEIF_IROT_TO_EXIFitemsr   )<r   r   Zmeta_boxr(   r   r   r   Zmeta_offsetZ	meta_sizeZmeta_headerZ
meta_startZmeta_endZprimary_item_id
propertiesZassociationsZ
item_typesZitem_extentsZpayload_startZpayload_endversionentry_countr   r   Z
entry_sizeZ
entry_typeZ	entry_endZinfe_payloadZinfe_versionZitem_idZ	item_typeoffset_sizeZlength_sizeZbase_offset_sizeZ
index_size
item_countZbase_offsetZextent_countZextentsZextent_offsetZextent_lengthZp_offsetZp_sizeZp_typeZp_headerZp_payload_startZp_payload_endflagsZis_large_indexZassoc_countZ
item_propsr^   Ztarget_indexesr1   r2   r3   r   indexZ
extent_endZ	exif_itemZtiff_offsetr#   r#   r%   r     s|  


"  
  
 




"""

$



r   c                 C   s  |  d | d}t|dk rdS |drd}d}n|dr&d	}d}n|d
r0d	}d}ndS z/|rt|dk r?W dS t|d |dd d }|dkrTW dS t|d |dd d }|  | t|d | dd }t|D ]e}| d}t|dk r W dS t|d |d d \}	}
t|d |dd d }|dd }|	dkr|dkr|
dkrt|d |d d d   W S |
dkrt|d |d d d   W S qxW dS t|d |dd d }|  | t|d | dd }t|D ]Z}| d}t|dk r W dS t|d |d d \}	}
}|dd }|	dkr^|dkr^|
dkrLt|d |d d d   W S |
dkr^t|d |d   W S qW dS  tjyn   Y dS w )Nr   re   r   r   rr   r   Frv   r   rx   Tr   r   r   Qry   ZHHr   r   r   r   r   r   ZHHL)r*   r&   r   r   r   r   r   r   )r   r   r   Z
is_bigtiffZbytesizeZ
ifd_offsetr   r   entryr   r   r   Zvalue_fieldr#   r#   r%   _read_tiff_rotation  st   






""


"
r   c                 C   s0   t | }|dkr
|S t| }|dkr|S t| S )Nr   )r   r   r   )r   r3   r#   r#   r%   _get_rotation  s   r   c                 C   s   | dv S )N>   r   r   r   r   r#   )r3   r#   r#   r%   _is_rotation_swapped  s   r   c              	   C   s   d}d}|  d | d}t|}|dkr#|d d dv r#	 ||fS |dkr|drd}|dd  }	 |d
d }|dkrqztd|dd  \}}	}
W n tjyZ   tdw |
rht|t	}t|	t	}n|}|	}	 ||fS |dkrz	 ||fS ztd|dd
 \}W n tjy   tdw ||d 7 }|  | | d}q5|dkr1|dr1zq|  d d}d}d|  krdksn |  |d t
| \}}|dkr|  dd td| d\}
}}	|
dks|
dkr|}|	}n|
dkrt|t}t|	t}nd|  krdkrn qW ||fS W ||fS W ||fS  tjtfy0   tdw |dkr|dr|  d td| d
d d }|  d
d d}z|dkr| d}|d
d  }|dkrsd	}|d8 }ntd|d d
 \}|  |d d ||8 }|dks\|r|dkr| d}|d
d  }|d krtd!| d\}	}}}t||}t|	|}n+td|d d
 \}|  |d d ||8 }|dksW ||fS W ||fS W ||fS W ||fS  tjy   td"w ||fS )#Nr   r   rc   r   r   rb   rd   r   Tr   s   pHYsz>LLBrh   s   IDATrn   r      r   ri   r   r   r      r   z>BHHr   rj   rk       Fs   res s   resdz>HHBBrm   )r*   r&   r   r   r   r   r   r[   rR   rJ   r   rL   )r   ZxDPIZyDPIr   r   ZchunkOffsetchunkZ	chunkTypeZxDensityZyDensityrQ   ZdataSizer   r   Z
headerSizeZfoundResBoxZ	boxHeaderZboxTypeZboxSizeZyUnitZxUnitr#   r#   r%   _get_dpi  s   

S
A?






0$0










r   c                 C   s   d}|  d | d}t|dkr,|d d dv r,|d }|d@ r*d	|d
@ d  }|S t|dkrZ|drZ|dd dkrZ|d }|d }dddddd|}|rZd	||  }|S )Nr   r   r   r   r   rb   r      r   r   r   r}   rd   r   re   rf   rc   r   r   r   r   r   r   r   )r*   r&   r   r   r   )r   r6   r   packed	bit_depth
color_typer7   r#   r#   r%   _get_colors;  s,   

&r   c              	   C   sJ  d}|  d | d}t|}|dkr3|dr3|dd dkr3|d	 }d
dd
ddd|d}|S |dkrh|drhz|  d t|  |  dd
 td| d
d }W |S  tjt	fyg   t	dw |dkrx|d d dv rxd}|S |dkr|drtd|dd d }|dkrd
}|S |dkrd}|S |dkrd}|S )Nr   r   r   r}   rd   r   re   rf   r   r   r   r   r   r   ri   r   z>Brj   r   r   rb   r   rw      r~   r   rc   )
r*   r&   r   r   r   r   r   r   r   r[   )r   r7   r   r   r   r   r#   r#   r%   _get_channelsR  sN   

"

r   Tr   dpir6   r   r7   r   r   r6   r   r7   r    c             	   C   s   t | \}}zLd } }	 }
 } } }}|r,t|\}}	t|}
|r,t|
r,|	|}}	|r4t|\}}|r:t|}|r@t|}t||	|
||||dW |rR|  S S |rZ|  w w )Nr   )r1   r2   r3   r4   r5   r6   r7   )	rE   r   r   r   r   r   r   r0   close)r9   r   r   r6   r   r7   r   Zshould_closer1   r2   r3   r4   r5   Zcolor_countZchannel_countr#   r#   r%   get_infox  s(   


r   )r   c                C   s:   zt | ddd|dd}W n
 ty   Y dS w |j|jfS )z
    Return (width, height) for a given img file content.
    Set exif_rotation=False to return stored dimensions as-is.
    :type filepath: Union[bytes, str, pathlib.Path]
    :rtype Tuple[int, int]
    TFr   r   r   )r   r   r1   r2   )r9   r   infor#   r#   r%   r     s   r   c                 C   s6   z
t | dddd}W n
 ty   Y dS w |j|jfS )z
    Return (x DPI, y DPI) for a given img file content
    no requirements
    :type filepath: Union[bytes, str, pathlib.Path]
    :rtype Tuple[int, int]
    FT)r   r   r6   r   )r   r   r4   r5   )r9   r   r#   r#   r%   getDPI  s   r   )?r@   r   rY   r   decimalr   typingr   r   r   r   r   r   urllib.parser	   urllib.requestr
   Z	xml.etreer   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   Z
_UNIT_INCHZ_TIFF_TYPE_SIZESr   r   r   r   r>   r/   PathLikeZ	PathInputZ	FileInputr0   rE   rR   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r#   r#   r#   r%   <module>   s     
 4$	% Q>
`&
$