B
    d6                 @   s   d dl Z d dlZd dlZd dlZd dlmZ dddg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
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getgetDPI__version__z1.4.1                     )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?gR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"   V/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/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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`   gRQ@mmr   inZpcr   ptZpxzunknown unit type: %s)rematch
ValueErrorgroupsfloat)valueZmatchedlengthr!   r"   r"   r#   _convertToPxB   s&    r2   c          	   C   sT  d}d}t | tjr| }n
t| d}z|d}t|}|dkr|dd dkry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rytd|dd
 \}}W n tjk
r   t	dY nX nJ|dkrL|
drLytd|dd \}}W n  tjk
rF   t	dY nX n|dkrJ|
drJy|d d}d}xd|  krdkrn n
|dkr||d |d}xt|dkr|d}qW t|}td|dd d }qxW |dd td|d\}}W n$ tjtfk
rD   t	dY nX n|dkr|
dr|d y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 }	xt|	D ]}
td#|d\}}}}|d$kr\|d%krBt|d& }n|dkrR|}nt	d'n:|d(kr|d%kr~t|d& }n|dkr|}nt	d)|dkr|dkrP qW |dks|dkr>t	d*nl|dkr|
d+rtd,|dd d }|| td-|dd }	x`t|	D ]T}
td.|d\}}}}|d$krX|}n|d(krf|}|dkr*|dkr*P q*W |dks|dkr>t	d*n|dkr|
d/rtd,|dd d }|dkrt	d0|td1|dd d }|| td1|dd }	x`t|	D ]T}
td2|d3\}}}}|d$krX|}n|d(krf|}|dkr*|dkr*P q*W |dks|dkr>t	d4n|d5kr>|
d6s|
d7r>|d |d8}y2|d9}td:|d}td;|d}W n tk
r(   t	d<Y nX t|}t|}n |dd d=kr4|dd d>kr4|d g }x|d}| rqr|d?krt	d@|dAkr|  qr| st	dB|}|d}x"| r||7 }|d}qW |t| t|dkrP |dtj qrW |\}}n
|
dCr>|dd dDkr>|dd dEkr~tdF|dGdH \}}n|dd dIkrtdJ|d
dK dL d }tdJ|dKdH dL d }nt|dd dMkr6|dNdO }|d dP@ d> |d B d }|d% dQ@ d> |d d> B |d d@ d? B d }nt	dRW d|  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   s   PNG

r      s   IHDRz>LLzInvalid PNG filer   r
   s   r         )         r	      z>Hz>HHr   zInvalid JPEG files      jP  

0   zInvalid JPEG2000 files   MM *z>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readlenstructunpackerrorr-   
startswithseekord	TypeErrorranger   formatdecoder+   searchgroup	Exceptionr2   isspacereadlineisdigitappendosSEEK_CURclose)filepathheightwidthfhandleheadsizeftypebyteoffsetZifdsizeitagdatatypecountdataZbytesize_offsetsizesZnext_chrbr"   r"   r#   r   Z   s$   

"
(
 















"


$






2
c             C   s6  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 }x|d
d	 }|dkrytd|d	d \}	}
}W n tj	k
r   t
dY nX |rt|	t}t|
t}n|	}|
}P q~|dkrP q~ytd|dd
 \}W n  tj	k
r>   t
dY nX ||d 7 }|| |d}q~W n|dkr|dry|d d}d}xd|  krdksvn |dkr|dd td|d\}}	}
|dks|dkr|	}|
}n|dkrt|	t}t|
t}P ||d |d}xt|dkrN|d}q2W t|}td|dd d }qW W 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!}yxl|dkrZ|d	}|d
d }|d"kr(d#}|d	8 }P td|dd
 \}||d	 d ||8 }qW |rx|dkr|d	}|d
d }|d$krtd%|d\}
}	}}t|	|}t|
|}P td|dd
 \}||d	 d ||8 }qdW W n. tj	k
r" } zt
d&W dd}~X Y nX W d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   r3   r5   r   Nr   )s   GIF87as   GIF89as   PNG

r   r   s   pHYsz>LLBzInvalid PNG files   IDATz>Lr   r      r
   s   r7   r8      r   r	   z>BHHr   r<   z>HzInvalid JPEG files      jP  

    Fs   res Ts   resdz>HHBBzInvalid JPEG2000 file)rK   bytesstrrN   rO   rP   rT   rQ   rR   rS   r-   r$   r   rU   r   rV   )re   ZxDPIZyDPIrh   ri   rj   ZchunkOffsetchunkZ	chunkTypeZxDensityZyDensityr!   ZdataSizerk   rl   Z
headerSizeZfoundResBoxZ	boxHeaderZboxTypeZboxSizeZyUnitZxUniter"   r"   r#   r     s    










$






$)rL   rb   r+   rQ   Z	xml.etreer   __all__r   r   r   r   r   r   r   r   r   r   r    Z
_UNIT_INCHZ_TIFF_TYPE_SIZESr$   r2   r   r   r"   r"   r"   r#   <module>   sD   
 =