U
    ZSh6                     @   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rt| d d S |tkr| d	 S |t	kr| d
 S |t
kr| d S | S )Ng5B>g      ?gti0?gd?g
F%u?gK7A?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    F/root/rtd-docs/venv/lib/python3.8/site-packages/imagesize/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rt|d S |d
krt|d d S |dkrt|d d S |dkrt|S td| d S )Nz(\d+(?:\.\d+)?)?([a-z]*)$zunknown length value: %s cm`   r   mmr   inZpcr   ptZpxzunknown unit type: %s)rematch
ValueErrorgroupsfloat)valueZmatchedlengthr   r    r    r!   _convertToPx;   s&    r0   c              	   C   sF  d}d}t | tjr| }n
t| d}z|d}t|}|dkr|dd dkrztd|dd \}}W n tj	k
r   t
d	Y nX n|d
kr|dr|dd dkrztd|dd
 \}}W n tj	k
r   t
dY nX n<|dkrL|drLztd|dd \}}W n  tj	k
rF   t
dY nX n|dkrB|drBz|d d}d}d|  krdkrn n
|dkr||d |d}t|dkr|d}qt|}td|dd d }qv|dd td|d\}}W n$ tj	tfk
r<   t
dY nX n|dkr|dr|d ztd|d\}}W n  tj	k
r   t
d Y nX n|dkr|d!rtd"|dd d }|| td|dd }	t|	D ]}
td#|d\}}}}|d$krR|d%kr8t|d& }n|dkrH|}nt
d'n:|d(kr|d%krtt|d& }n|dkr|}nt
d)|dkr|dkr qq|dks|dkr0t
d*nf|dkr|d+rtd,|dd d }|| td-|dd }	t|	D ]X}
td.|d\}}}}|d$krN|}n|d(kr\|}|dkr |dkr  qzq |dks|dkr0t
d*n|dkr|d/rtd,|dd d }|dkrt
d0|td1|dd d }|| td1|dd }	t|	D ]X}
td2|d3\}}}}|d$krN|}n|d(kr\|}|dkr |dkr  qzq |dks|dkr0t
d4n|d5kr6|d6s|d7r6|d |d8}z2|d9}td:|d}td;|d}W n tk
r    t
d<Y nX t|}t|}n|dd d=kr&|dd d>kr&|d g }|d}| rqh|d?krt
d@|dAkr|  qh| st
dB|}|d}| r||7 }|d}q|t| t|dkrq|dtj qh|\}}n
|dCr0|dd dDkr0|dd dEkrptdF|dGdH \}}n|dd dIkrtdJ|d
dK dL d }tdJ|dKdH dL d }nt|dd dMkr(|dNdO }|d dP@ d> |d B d }|d% dQ@ d> |d d> B |d d@ d? B d }nt
dRW 5 |  X ||fS )Sz
    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 files   RIFFs   WEBPs   VP8 z<HH      s   VP8Xz<I       s   VP8L      ?      zUnsupported WebP file)
isinstanceioBytesIOopenclosereadlenstructunpackerrorr+   
startswithseekord	TypeErrorranger   formatdecoder)   searchgroup	Exceptionr0   isspacereadlineisdigitappendosSEEK_CUR)filepathheightwidthfhandleheadsizeftypebyteoffsetZifdsizeitagdatatypecountdataZbytesize_offsetsizesZnext_chrbr    r    r!   getS   s"   

"
&



















"


$







2
r|   c                 C   s,  d}d}t | tst| } t| d}|d}t|}|dkrV|dd dkrVn|dkrh|drhd	}|d	d }|d
d	 }|dkrztd|d	d \}	}
}W n tj	k
r   t
dY nX |rt|	t}t|
t}n|	}|
}qq||dkrqq|ztd|dd
 \}W n  tj	k
r@   t
dY nX ||d 7 }|| |d}q|n|dkr|drz|d d}d}d|  krdksrn |dkr|dd td|d\}}	}
|dks|dkr|	}|
}n|dkrrt|	t}t|
t}qr||d |d}t|dkrL|d}q0t|}td|dd d }qW n  tj	k
r   t
dY nX n|dkr|dr|d  td|d
d d	 }|d
d d!}z|dkrT|d	}|d
d }|d"kr"d#}|d	8 }qTtd|dd
 \}||d	 d ||8 }q|r|dkr|d	}|d
d }|d$krtd%|d\}
}	}}t|	|}t|
|}qtd|dd
 \}||d	 d ||8 }qZW n. tj	k
r } zt
d&W 5 d}~X Y nX W 5 Q R X ||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   r1   r4   r   Nr   r3   r5   r   r	   s   pHYsz>LLBr7   s   IDATrD   r   r      r   r8   r9   r:      r   r   z>BHHr
   r>   r?   r@   rA       Fs   res Ts   resdz>HHBBrC   )rR   bytesstrrU   rW   rX   r\   rY   rZ   r[   r+   r"   r   r]   r   r^   )rl   ZxDPIZyDPIro   rp   rq   ZchunkOffsetchunkZ	chunkTypeZxDensityZyDensityr   ZdataSizerr   rs   Z
headerSizeZfoundResBoxZ	boxHeaderZboxTypeZboxSizeZyUnitZxUniter    r    r!   getDPI  s    










"








$r   )rS   rj   r)   rY   Z	xml.etreer   r   r   r   r   r   r   r   r   r   r   Z
_UNIT_INCHZ_TIFF_TYPE_SIZESr"   r0   r|   r   r    r    r    r!   <module>   sB    =