o
    gc                     @   sd   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 ddlZddlZG dd deZG dd deZdS )   )
ioostagsencodersdecodersreducevaluesTYPESurllibStringIO    Nc                   @   sn   e Zd ZdZdZdZdZdZdZdZ	dZ
dddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TiffTagr   NZ	UndefinedzUndefined tagzNothing about this tagTiff tagc                 C   st   t |\| _}}| _|| _|| _|d kr|d n|| _|d kr'| | d S |d kr8t|ds3|fn|| _	d S d S )Nlen)
r   getkeycommenttagnametype_encodehasattrvalue)selfr   r   r   r   _typdefault r   rC:\Users\olivi\AppData\Roaming\Blender Foundation\Blender\3.4\scripts\addons\BlenderGIS-master\core\lib\Tyf\ifd.py__init__   s   &zTiffTag.__init__c                 C   s"  |dkrRzt | dttdt| j  W n ty*   t | dttd|  Y nw zt | dttdt| j  W nK tyQ   t | dttd|  Y n7w |dkrtt| j	d }|d krvt
|trj|d n|}||d|f | _t|| jdvrd	nd
 | _|   t | || d S )Nr   _encoderz_%s_decoderr   r   zno description found [%r]   
   r      )object__setattr__getattrr   hexr   AttributeErrorr   r   r   
isinstancetupler   meaningr   r   count_determine_if_offset)r   attrr   Z
restrictedvr   r   r   r'      s   $*$*zTiffTag.__setattr__c                 C   s.   d| j | j| j| jf | jsd S d| j  S )Nz<%s 0x%x: %s = %r> z := %r)r   r   r   r   r-   r   r   r   r   __repr__-   s   .zTiffTag.__repr__c                 C   s   |  || _d S N)r    r   )r   r   r   r   r   r   0   s   zTiffTag._encodec                 C   s   |  | jS r5   )r!   r   r3   r   r   r   _decode3   s   zTiffTag._decodec                 C   s|   | j dkr| jdv rt| dd d S | j dkr$| jdv r$t| dd d S | j dkr6| jdv r6t| dd d S t| dd	 d S )
Nr   )r   r%                  	   value_is_offsetFr%   )r7   r;   r8   )r   r%   r9   r:   T)r.   r   setattrr3   r   r   r   r/   6   s   $$$zTiffTag._determine_if_offsetc                 C   sf   t dt| j d  }t d| j|  | }| jdv r$| jd|  S | jdv r0| jd|  S | jS )N=r   z=L)r%   r:       )r   r7   r9   r;   )r   )structcalcsizer	   r   r.   r   )r   sZ	voidspacer   r   r   _fill<   s
   zTiffTag._fillc                 C   s:   | j rtdt| j d | j| jdv rdnd   S dS )Nr?   r   r"   r%   r   )r=   rA   rB   r	   r   r.   r3   r   r   r   rB   C   s   :zTiffTag.calcsize)NNr   )__name__
__module____qualname__r   r   r.   r   r   r   r   r-   r   r'   r4   r   r6   r/   rD   rB   r   r   r   r   r      s"    
	r   c                   @   s   e Zd ZdZedd dddZedd dddZedd ddd	Zed
d dddZedd dddZ	i fddZ
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd,dd Zd!d" Zd-d(d)Zd-d*d+ZdS ).IfdzTiff Tagc                 C      | j di S )Nii  sub_ifdr   objr   r   r   <lambda>J       zIfd.<lambda>Nzshortcut to EXIF sub ifdc                 C   rI   )N%  rJ   rL   r   r   r   rN   K   rO   zshortcut to GPS sub ifdc                 C   s    d| v pd| v pd| v pd| v S )Ni  i   iD  i  r   rL   r   r   r   rN   L   s     z&return true if it contains raster datac                 C   s,   | j  ptt| j| j | j t| j S r5   )
has_rasterboolr   stripestilesfreejpegIFrL   r   r   r   rN   M   s   , r2   c                 C   s8   t dt| d  d ttjdd t| D dS )Nz=HZHHLLLc                 S   s   g | ]}|  qS r   )rB   ).0tr   r   r   
<listcomp>Q   s    z Ifd.<lambda>.<locals>.<listcomp>)ifddata)rA   rB   r   r   int__add__dictr   rL   r   r   r   rN   O   s   z+return ifd-packed size and data-packed sizec                 K   sF   || _ t| d|dd t|  i | _d| _d| _d| _d| _	d S )Ntagnamer   r       )
_sub_ifdr>   popr_   r   rK   rS   rT   rU   rV   )r   rK   kwargsr   r   r   r   T   s   

zIfd.__init__c              	   C   s   | j  D ].\}\}}tj||d}||v r3|| jvr$ti |d| j|< | j| t||d  d S qt|}t	| |t||| j
d d S )N)familyrK   r`   )r   )r   r   )rb   itemsr   _2tagrK   rH   addtagr   r_   __setitem__r`   )r   r   r   rY   tstnamer   r   r   rj   _   s   

zIfd.__setitem__c              	   C   sF   | j  D ]}z|| W   S  ty   Y qw t| t| S r5   )rK   r   KeyErrorr_   __getitem__r   rh   r6   r   r   ir   r   r   rn   k   s   zIfd.__getitem__c              	   C   s0   | j D ]}|| vr| t|dd| jd qd S )Nr8   r   )r   )rK   ri   r   r`   )r   r   r   r   r   _checkq   s
   
z
Ifd._checkc                 C   s   | j  D ]%\}\}}||v r*|| jvrti |d| j|< | j| |||  d S qt||| jd}t|ds;|fn||_| j|_	t
| || d S )Nrf   )r   r   r   __len__)rb   rg   rK   rH   setr   r`   r   r   r   r_   rj   )r   r   typr   rY   rk   rl   tifftagr   r   r   rs   v   s   
zIfd.setc                 C   s8   | j  D ]}||v r||  S qt| t|S r5   )rK   r   r   r_   r   rh   ro   r   r   r   r      s   zIfd.getc                 C   s*   t |tr| j|_t| |j| d S d S r5   )r+   r   r`   r   r_   rj   r   )r   ru   r   r   r   ri      s   
z
Ifd.addtagc                 c   sZ    t t| dd dD ]}|V  q| j D ]}t t|dd dD ]}|V  q$qd S )Nc                 S      | j S r5   r   er   r   r   rN          zIfd.tags.<locals>.<lambda>)r   c                 S   rv   r5   rw   rx   r   r   r   rN      rz   )sortedr_   r   rK   )r   r1   rp   r   r   r   r      s   zIfd.tags        c                 C   sN   d| j vrtjdg| j d< | | d< | d< | | d< | d< | | d< | d< d S )	NrP   zGPS tagr   r%   r7   r8   r#   r9   )rb   r   gpsT)r   	longitudelatitudeZaltituder   r   r   set_location   s
   
zIfd.set_locationc                 C   sL   t g dt | j kr$| d | d  | d | d  | d | d  fS d S )N)r   r%   r7   r8   r#   r9   r7   r8   r   r%   r#   r9   )rs   gps_ifdkeysr3   r   r   r   get_location   s   zIfd.get_location   256x2560xff00ffpngr   c           
      C   s   t g dt | j krA| j}|d |d  }|d |d  }ztd|||||||||f	 }	W n   t  Y S t|	 S t S )Nr   r%   r7   r8   r   r%   r7   r8   xhttps://maps.googleapis.com/maps/api/staticmap?center=%s,%s&zoom=%s&size=%s&markers=color:%s%%7C%s,%s&format=%s&scale=%s)rs   r   r   r
   urlopenr   readprint)
r   zoomsizemcolorformatscaler   r   r~   openerr   r   r   load_location   s   
zIfd.load_locationc           
      C   s   t g dt | j krI| j}|d |d  }|d |d  }	ztd||	|||||	||f	 tj|d d |  W d S    td	 Y d S d S )
Nr   r   r%   r7   r8   r   r   .zgoogleapis connexion error)	rs   r   r   r
   urlretriever   pathsplitextr   )
r   Ztilenamer   r   r   r   r   r   r   r~   r   r   r   dump_location   s    
zIfd.dump_location)r|   )r   r   r   r   r   )rE   rF   rG   r`   propertyZexif_ifdr   rQ   raster_loadedr   r   rj   rn   rq   rs   r   ri   r   r   r   r   r   r   r   r   r   rH   G   s,    

rH   )r2   r   r   r   r   r   r   r   r	   r
   r   rA   Z	fractionsr&   r   r_   rH   r   r   r   r   <module>   s   0@