a
    ~ú a(4  ã                   @   sš   d dl Z d dlZd dlZd dl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dd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚElementTreeéýÿÿÿéþÿÿÿéÿÿÿÿé   é   é   é   é   é   é   )r   r   r   r	   r
   r   é   r   é	   é
   é   é   c                 C   sÜ   |t krt| d d ƒS |tkr0t| d d ƒS |tkrHt| d d ƒS |tkr`t| d d ƒS |tkrxt| d d ƒS |tkrt| d d ƒS |tkr¨t| d d ƒS |tkr¸| d	 S |t	krÈ| d
 S |t
krØ| d S | S )Ngê5‡µB¢ú>g      à?g²t±i¥0?g¢ÑÄÎd?g¦
F%uš?g¨ÆK7‰AÐ?çR¸…ëQ@gffffff9@éþ   iì	  i8c  )Ú_UNIT_KMÚintÚ
_UNIT_100MÚ	_UNIT_10MÚ_UNIT_1MÚ
_UNIT_10CMÚ_UNIT_CMÚ_UNIT_MMÚ_UNIT_0_1MMÚ_UNIT_0_01MMÚ_UNIT_UM)ZdensityÚunit© r    ú(lib/python3.9/site-packages/imagesize.pyÚ_convertToDPI#   s*    r"   c                 C   sÐ   t  d| ¡}|std|  ƒ‚| ¡ \}}|dkr8t|ƒS |dkrPt|ƒd d S |dkrlt|ƒd d d S |d	kr€t|ƒd S |d
kr˜t|ƒd d S |dkr°t|ƒd d S |dkrÀt|ƒS td| ƒ‚d S )Nz(\d+(?:\.\d+)?)?([a-z]*)$zunknown length value: %sÚ Úcmé`   r   Zmmr   ÚinZpcr   ÚptZpxzunknown unit type: %s)ÚreÚmatchÚ
ValueErrorÚgroupsÚfloat)ÚvalueZmatchedÚlengthr   r    r    r!   Ú_convertToPx;   s&    r/   c              	   C   s2  d}d}t | tjƒr| }n
t| dƒ}zø| d¡}t|ƒ}|dkr|dd… dv rzt d|dd… ¡\}}W n tjyŠ   t	d	ƒ‚Y n0 n„|dkrð| 
d
¡rð|dd… dkrðzt d|dd… ¡\}}W n tjyê   t	dƒ‚Y n0 n$|dkrF| 
d
¡rFzt d|dd… ¡\}}W n tjy@   t	dƒ‚Y n0 nÎ|dkr:| 
d¡r:z¶| d¡ d}d}d|  krˆdkr–n n
|dv rî| |d¡ | d¡}t|ƒdkrÈ| d¡}q¬t|ƒ}t d| d¡¡d d }qp| dd¡ t d| d¡¡\}}W n" tjtfy4   t	dƒ‚Y n0 nÚ|dkr˜| 
d¡r˜| d¡ zt d| d¡¡\}}W n tjy’   t	dƒ‚Y n0 n||dkrÀ| 
d ¡rÀt d!|dd… ¡d }| |¡ t d| d¡¡d }	t|	ƒD ]°}
t d"| d¡¡\}}}}|d#krH|d$kr.t|d% ƒ}n|dkr>|}nt	d&ƒ‚n:|d'kr‚|d$krjt|d% ƒ}n|dkrz|}nt	d(ƒ‚|dkrî|dkrî q qî|dks´|dkrt	d)ƒ‚nT|dkr| 
d*¡rt d+|dd… ¡d }| |¡ t d,| d¡¡d }	t|	ƒD ]X}
t d-| d¡¡\}}}}|d#krD|}n|d'krR|}|dkr|dkr qpq|dks„|dkrt	d)ƒ‚n„|dkr| 
d.¡rt d+|dd… ¡d }|dkrÖt	d/ |¡ƒ‚t d0|dd… ¡d }| |¡ t d0| d¡¡d }	t|	ƒD ]X}
t d1| d2¡¡\}}}}|d#krD|}n|d'krR|}|dkr|dkr qpq|dks„|dkrt	d3ƒ‚n„|d4kr(| 
d5¡s²| 
d6¡r(| d¡ | d7¡}z2| d8¡}t d9|¡ d¡}t d:|¡ d¡}W n ty   t	d;ƒ‚Y n0 t|ƒ}t|ƒ}nì|dd… d<kr|dd… d=v r| d¡ g }| d¡}| ¡ rrqZ|d>kr„t	d?ƒ‚|d@krš| ¡  qZ| ¡ s¬t	dAƒ‚|}| d¡}| ¡ rÚ||7 }| d¡}qº| t|ƒ¡ t|ƒdkrúq| dtj¡ qZ|\}}W | ¡  n
| ¡  0 ||fS )Bz 
    Return (width, height) for a given img file content
    no requirements
    :type filepath: Union[bytes, str, pathlib.Path]
    :rtype Tuple[int, int]
    r   Úrbé   r   Nr   ©s   GIF87as   GIF89az<hhzInvalid GIF fileó   ‰PNG

r   é   s   IHDRz>LLúInvalid PNG filer   r   ó   ÿØr   éÀ   éÏ   )éÄ   éÈ   éÌ   r   éÿ   ú>Hz>HHr	   úInvalid JPEG fileó      jP  
‡
é0   úInvalid JPEG2000 files   MM *ú>Lz>HHLLé   r   i   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.s   II* z<Lz<Hz<HHLLs   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   123456ó    zInvalid Netpbm fileó   #z&Invalid character found on Netpbm file)Ú
isinstanceÚioÚBytesIOÚopenÚreadÚlenÚstructÚunpackÚerrorr*   Ú
startswithÚseekÚordÚ	TypeErrorÚranger   ÚformatÚdecoder(   ÚsearchÚgroupÚ	Exceptionr/   ÚisspaceÚreadlineÚisdigitÚappendÚosÚSEEK_CURÚclose)ÚfilepathZheightÚwidthÚfhandleÚheadÚsizeÚftypeÚbyteÚoffsetZifdsizeÚiÚtagZdatatypeÚcountÚdataZbytesize_offsetZsizesZnext_chrr    r    r!   ÚgetS   s   

"
&



















"



$








rn   c                 C   s>  d}d}t | tƒst| ƒ} t| dƒþ}| d¡}t|ƒ}|dkrV|dd… dv rVnÀ|dkrd| d¡rdd	}|d	d… }|d
d	… }|dkrôzt d|d	d… ¡\}	}
}W n tj	yÊ   t
dƒ‚Y n0 |ræt|	tƒ}t|
tƒ}n|	}|
}qq||dkrqq|zt d|dd
… ¡\}W n tj	y<   t
dƒ‚Y n0 ||d 7 }| |¡ | d¡}q|n²|dkr”| d¡r”zö| d¡ d}d}d|  kr¦dksnn |dkr| dd¡ t d| d¡¡\}}	}
|dksê|dkrô|	}|
}n|dkrnt|	tƒ}t|
tƒ}qn| |d¡ | d¡}t|ƒdkrH| d¡}q,t|ƒ}t d| d¡¡d d }qŽW n tj	yŽ   t
dƒ‚Y n0 n‚|dkr| d¡r| d ¡ t d| d
¡¡d d	 }| d
d¡ d!}z|dkrN| d	¡}|d
d… }|d"krd#}|d	8 }qNt d|dd
… ¡\}| |d	 d¡ ||8 }qâ|râ|dkrâ| d	¡}|d
d… }|d$kr°t d%| d¡¡\}
}	}}t|	|ƒ}t|
|ƒ}qât d|dd
… ¡\}| |d	 d¡ ||8 }qTW n0 tj	y } zt
d&ƒ‚W Y d}~n
d}~0 0 W d  ƒ n1 s,0    Y  ||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]
    r   r0   r1   r   Nr   r2   r3   r   r	   s   pHYsz>LLBr5   s   IDATrB   r   r   é   r   r6   r7   r8   éà   r   r   z>BHHr
   r<   r=   r>   r?   é    Fs   res Ts   resdz>HHBBrA   )rH   ÚbytesÚstrrK   rL   rM   rQ   rN   rO   rP   r*   r"   r   rR   r   rS   )rb   ZxDPIZyDPIrd   re   rf   ZchunkOffsetÚchunkZ	chunkTypeZxDensityZyDensityr   ZdataSizerg   rh   Z
headerSizeZfoundResBoxZ	boxHeaderZboxTypeZboxSizeZyUnitZxUnitÚer    r    r!   ÚgetDPI  s°    










"








>rv   )rI   r_   r(   rN   Z	xml.etreer   r   r   r   r   r   r   r   r   r   r   Z
_UNIT_INCHZ_TIFF_TYPE_SIZESr"   r/   rn   rv   r    r    r    r!   Ú<module>   sB   ô 1