a
    d0                     @   sb   d dl Z d dlZddlT ddlmZ ddlT d dlmZ dZddd	Z	G d
d de
Zdd ZdS )    N   )*)InvalidImageDataError)_webp   IIFc                 C   s  i i i i i dd}t | }|jdu r(|S |jdd tkrBd|_nd|_t|jd |jdd	 d }||d
|d
< |d
 d}tj	|d
 v r|d
 tj	 }||d|d< tj
|d
 v r|d
 tj
 }||d|d< tj|d v r|d tj }||d|d< |dkrt|jd |d }||d|d< tj|d v rtj|d v r|d tj |d tj  }|j|d tj | }||d< |rt|}|S )a  
    py:function:: piexif.load(filename)

    Return exif data as dict. Keys(IFD name), be contained, are "0th", "Exif", "GPS", "Interop", "1st", and "thumbnail". Without "thumbnail", the value is dict(tag name/tag value). "thumbnail" value is JPEG as bytes.

    :param str filename: JPEG or TIFF
    :return: Exif data({"0th":dict, "Exif":dict, "GPS":dict, "Interop":dict, "1st":dict, "thumbnail":bytes})
    :rtype: dict
    N)0thExifGPSInterop1st	thumbnailr      <>L      r   first_ifd_pointerr   r	   r
   s       r   r   )_ExifReadertiftagLITTLE_ENDIANendian_markstructunpackget_ifd_dictpopZImageIFDZExifTagZGPSTagZExifIFDZInteroperabilityTagZJPEGInterchangeFormatZJPEGInterchangeFormatLength_get_key_name_dict)Z
input_dataZkey_is_name	exif_dictZ
exifReaderpointerr   endZthumb r    U/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/piexif/_load.pyload   s^    


r"   c                   @   s&   e Zd Zdd Zd	ddZdd ZdS )
r   c           	      C   s  t jdkpt|t}|rV|dd dkrVt|}t|}|rL|dd  | _nd | _n|rt|dd dv rt|| _n|r|dd dkr|d	d
 dkrt|| _np|r|dd dkr|dd  | _nJt	|d}|
d}W d    n1 s0    Y  |dkr2t|}|r*|dd  | _nd | _n|dv rtt	|d}|
 | _W d    n1 sh0    Y  nt	|d}|
d
}W d    n1 s0    Y  |dd dkr|d	d
 dkrt	|d}|
 }W d    n1 s0    Y  t|| _ntdd S )N)   r   r   r   r   s   
   )r   s   MMr   s   RIFFr      s   WEBPs   Exif   rbz$Given file is neither JPEG nor TIFF.)sysversion_info
isinstancestrZsplit_into_segmentsZget_exif_segr   r   Zget_exifopenreadZread_exif_from_filer   )	selfdataZmaybe_imagesegmentsZapp1fZmagic_numberheaderZ	file_datar    r    r!   __init__C   s<    

$(

,*$(z_ExifReader.__init__Fc                 C   sx  i }t | jd | j||d  d }|d }|dv r>d}n|}g }t|D ]}	|d|	  }t | jd | j||d  d }
t | jd | j|d |d  d }t | jd | j|d |d	  d }| j|d	 |d  }|||||f ||||
f}|
t| v r$| |||
< qN|rN|d |d
 |d | jf||
< qN|dkrt|d|  }| j||d  |d< |S )NHr   r   )r   r   Imager%   r   r   r   r   r   r   )r   r   r   r   rangeappendTAGSconvert_value)r.   r   Zifd_nameZread_unknownZifd_dictZ	tag_countoffsettZp_and_valuextagZ
value_typeZ	value_numvalueZv_setr    r    r!   r   j   sN     
z_ExifReader.get_ifd_dictc                    s  d }|d }|d }|d }|t jkr|dkrdtjd |d  td| j  |  }ntd| |d| }n|t jkr|dkrtjd |d  j  | d  }n|d|d  }n|t jkrP|dkr*tjd |d  tjd|  j  |d   }n"tjd|  |d|d  }n |t jkr|dkrtjd |d  tjd|  j  |d   }ntjd|  |}n|t j	krZtjd |d  |dkr
t
 fdd	t|D }nLtjd j  d  d tjd j d  d
  d f}n|t jkr|dkrtjd |d  td| j  |  }ntd| |d| }n|t jkr|dkrtjd |d  j  |  }n|d| }n^|t jkr|dkrhtjd |d  tjd|  j  |d   }n"tjd|  |d|d  }n|t jkr|dkrtjd |d  tjd|  j  |d   }ntjd|  |}nr|t jkrtjd |d  |dkrHt
 fdd	t|D }nLtjd j  d  d tjd j d  d
  d f}n|t jkr|dkrtjd |d  tjd|  j  |d   }ntjd|  |}nl|t jkrPtjd |d  tjd|  j  |d
   }n tdt|d  d t| t|t
rt|dkr|d S |S d S )Nr   r   r   r   r   Br4   c              
   3   sz   | ]r}t jd  j |d   d |d   d t jd  j d |d   d |d   d fV  qdS )r   r   r   r   Nr   r   r   r   .0r<   r   r.   r    r!   	<genexpr>   s    z,_ExifReader.convert_value.<locals>.<genexpr>r   bhlc              
   3   sz   | ]r}t jd  j |d   d |d   d t jd  j d |d   d |d   d fV  qdS )rG   r   r   r   Nr@   rA   rC   r    r!   rD      s    $r1   dz>Exif might be wrong. Got incorrect value type to decode.
tag: r#   z
type: )TYPESZByter   r   r   r   ZAsciiZShortZLongRationaltupler6   ZSByte	UndefinedZSShortZSLongZ	SRationalZFloatZDFloat
ValueErrorr+   r*   len)r.   valr/   r;   lengthr>   r    rC   r!   r9      s    
















z_ExifReader.convert_valueN)F)__name__
__module____qualname__r3   r   r9   r    r    r    r!   r   B   s   '
"r   c                 C   st   dd | d   D dd | d   D dd | d   D dd | d	   D d
d | d   D | d d}|S )Nc                 S   s"   i | ]\}}t d  | d |qS r5   namer8   rB   nr>   r    r    r!   
<dictcomp>      z&_get_key_name_dict.<locals>.<dictcomp>r   c                 S   s"   i | ]\}}t d  | d |qS )r   rU   rV   rW   r    r    r!   rY     rZ   r   c                 S   s"   i | ]\}}t d  | d |qS rT   rV   rW   r    r    r!   rY   	  rZ   r   c                 S   s"   i | ]\}}t d  | d |qS )r	   rU   rV   rW   r    r    r!   rY   
  rZ   r	   c                 S   s"   i | ]\}}t d  | d |qS )r
   rU   rV   rW   r    r    r!   rY     rZ   r
   r   )r   r   r   r	   r
   r   )items)r   Znew_dictr    r    r!   r     s    r   )F)r   r(   _common_exceptionsr   Z_exifZpiexifr   r   r"   objectr   r   r    r    r    r!   <module>   s   
6 D