U
    wh](                     @   s   d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ G dd deZdd Zdd	 Zd
d Zdd ZG dd deZegZdS )    N)c_char_pc_void_p)AvifImageFileBadImageOperationErrorBMPImageFileGIFImageFileHeicImageFileIcoImageFileImageJPEGImageFilePNGImageFileRGBAImageBufferRGBImageBufferTIFFImageFileWebPImageFilec                   @   s   e Zd ZdS )UnsupportedRotationN)__name__
__module____qualname__ r   r   [/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/willow/plugins/wand.pyr      s   r   c                  C   s   dd l } | jS Nr   )Z
wand.imageimagewandr   r   r   _wand_image   s    r   c                  C   s   dd l } | jS r   )Z
wand.colorcolorr   r   r   r   _wand_color   s    r   c                  C   s   dd l } | jS r   )Zwand.apiapir   r   r   r   	_wand_api%   s    r   c                  C   s   dd l } | jS r   )Zwand.versionversionr   r   r   r   _wand_version+   s    r!   c                   @   s  e Zd Zdd Zedd Zdd Zedd Zej	d	d
 Z
ej	dd Zej	dd Zej	dd Zej	dd Zej	dd Zej	dd Zej	dd Zdd Zdd Zej	d=eeed d!d"Zej	d>ed#d$d%Zej	d?ed#d&d'Zej	d@eeed)d*d+Zej	dAd,d-Zej	dBd.d/Zej	d0d1 Zej	d2d3 Zeejed4d5eje d4d5eje!d4d5eje"d4d5eje#d4d5eje$d4d5eje%d4d5eje&d4d5eje'd4d5d6d7 Z(e)e*d8d9 Z+e)e,d:d; Z-d<S )C	WandImagec                 C   s
   || _ d S Nr   )selfr   r   r   r   __init__2   s    zWandImage.__init__c                 C   s   t   t  t  t  d S r#   )r   r   r   r!   )clsr   r   r   check5   s    zWandImage.checkc                 C   s   t | j S r#   )r"   r   cloner%   r   r   r   _clone<   s    zWandImage._clonec                 C   s   t t |S r#   )boolr!   formats)r'   Zimage_formatr   r   r   is_format_supported?   s    zWandImage.is_format_supportedc                 C   s   | j jS r#   )r   sizer*   r   r   r   get_sizeC   s    zWandImage.get_sizec                 C   s   t | jjS r#   )lenr   sequencer*   r   r   r   get_frame_countG   s    zWandImage.get_frame_countc                 C   s   | j jS r#   )r   alpha_channelr*   r   r   r   	has_alphaK   s    zWandImage.has_alphac                 C   s   | j jS r#   )r   Z	animationr*   r   r   r   has_animationO   s    zWandImage.has_animationc                 C   s"   |   }|j|d |d  |S )Nr      )r+   r   resize)r%   r/   r)   r   r   r   r8   S   s    zWandImage.resizec           	      C   s   |\}}}}| j j\}}||ksH||ksH|dksH||ksH||ksH|dkrVtd||  }|j jtd|td|t||t||d |S )Nr   zInvalid crop dimensions: )lefttoprightbottom)r   r/   r   r+   cropmaxmin)	r%   rectr9   r:   r;   r<   widthheightr)   r   r   r   r=   Y   s.    zWandImage.cropc                 C   s0   |d }|rt d| j }|| t|S )NZ   zLSorry - we only support right angle rotations - i.e. multiples of 90 degrees)r   r   r)   rotater"   )r%   ZangleZnot_a_multiple_of_90r)   r   r   r   rD   q   s    

zWandImage.rotatec                 C   sh   |   s| S t|ttfr&t|dks.td|  }t dj	| |j
_d|j
_|j
jrdd|j
_|S )N   z6the 'color' argument must be a 3-element tuple or listzrgb({}, {}, {})removeF)r5   
isinstancetuplelistr1   	TypeErrorr+   r   Colorformatr   background_colorr4   )r%   r   r)   r   r   r   set_background_color_rgb~   s    z"WandImage.set_background_color_rgbc                 C   s   | j jdS )Niccr   profilesgetr*   r   r   r   get_icc_profile   s    zWandImage.get_icc_profilec                 C   s   | j jdS )NexifrP   r*   r   r   r   get_exif_data   s    zWandImage.get_exif_dataU   FT)qualityprogressiveapply_optimizersc           	   	   K   s~   | j |rdndL}||_|  }|dk	r6||jd< |  }|dk	rP||jd< |j|d W 5 Q R X |rv| |d t|S )aV  
        Save the image as a JPEG file.

        :param f: the file or file-like object to save to
        :param quality: the image quality
        :param progressive: whether to save as progressive JPEG file.
        :param apply_optimizers: controls whether to run any configured optimizer libraries
        :return: JPEGImageFile
        ZpjpegZjpegNrO   rT   file)	r   convertcompression_qualityrS   rQ   rU   saveoptimizer   )	r%   frW   rX   rY   kwargs	convertedicc_profile	exif_datar   r   r   save_as_jpeg   s    

zWandImage.save_as_jpeg)rY   c              	   K   sV   | j d,}|  }|dk	r(||jd< |j|d W 5 Q R X |rN| |d t|S )z
        Save the image as a PNG file.

        :param f: the file or file-like object to save to
        :param apply_optimizers: controls whether to run any configured optimizer libraries
        :return: PNGImageFile
        ZpngNrT   rZ   )r   r\   rU   rQ   r^   r_   r   )r%   r`   rY   ra   rb   rd   r   r   r   save_as_png   s    	
zWandImage.save_as_pngc              	   C   s<   | j d}|j|d W 5 Q R X |r4| |d t|S )NZgifrZ   )r   r\   r^   r_   r   r%   r`   rY   rb   r   r   r   save_as_gif   s
    zWandImage.save_as_gifP   )rW   losslessrY   c              	   C   s   | j d^}|r:t j}tttg|j_||jdd n||_	| 
 }|dk	rZ||jd< |j|d W 5 Q R X |s|r| |d t|S )a  
        Save the image as a WEBP file.

        :param f: the file or file-like object to save to
        :param quality: the image quality
        :param lossless: whether to save as lossless WEBP file.
        :param apply_optimizers: controls whether to run any configured optimizer libraries.
            Note that when lossless=True, this will be ignored.
        :return: WebPImageFile
        Zwebps   webp:lossless   trueNrO   rZ   )r   r\   r   libraryr   r   MagickSetOptionargtypesr   r]   rS   rQ   r^   r_   r   )r%   r`   rW   rj   rY   rb   rl   rc   r   r   r   save_as_webp   s"    
zWandImage.save_as_webpc              	   C   sx   | j dJ}|r@d|_t j}tttg|j_||j	dd n||_|j
|d W 5 Q R X |sp|rp| |d t|S )NZavifd   s   heic:losslessrk   rZ   )r   r\   r]   r   rl   r   r   rm   rn   r   r^   r_   r   )r%   r`   rW   rj   rY   rb   rl   r   r   r   save_as_avif  s    zWandImage.save_as_avifc              	   C   s<   | j d}|j|d W 5 Q R X |r4| |d t|S )NZicorZ   )r   r\   r^   r_   r	   rg   r   r   r   save_as_ico  s
    zWandImage.save_as_icoc              
   C   s   | j }|jdkr| }t|dr,|  n|jgtj|jddg|j	g|j	tj|jddgtj|jddg|jtj|jddgtj|jddgd}|
|j}|r|D ]
}|  qd|_t|S )	N)top_leftZ	undefinedauto_orientg     f@)Zdegreeg     V@g     p@)	top_rightbottom_rightbottom_leftZleft_topZ	right_topZright_bottomZleft_bottomrs   )r   Zorientationr)   hasattrrt   Zflop	functoolspartialrD   fliprR   r"   )r%   r   Zorientation_opsZfnsfnr   r   r   rt   #  s.    


zWandImage.auto_orientc                 C   s   | j S r#   r$   r*   r   r   r   get_wand_imageF  s    zWandImage.get_wand_image   )Zcostc                 C   s6   |j d t j|j d}t j|j|_| |S )Nr   rZ   )r`   seekr   r
   r   rl   ZMagickCoalesceImagesr   )r'   Z
image_filer   r   r   r   openJ  s    zWandImage.openc                 C   s   t | jj| jdS )NRGBr   r   r/   Z	make_blobr*   r   r   r   to_buffer_rgb[  s    zWandImage.to_buffer_rgbc                 C   s   t | jj| jdS )NZRGBAr   r*   r   r   r   to_buffer_rgba_  s    zWandImage.to_buffer_rgbaN)rV   FT)T)T)ri   FT)ri   FT)T).r   r   r   r&   classmethodr(   r+   r.   r
   Z	operationr0   r3   r5   r6   r8   r=   rD   rN   rS   rU   intr,   re   rf   rh   ro   rq   rr   rt   r}   Zconverter_fromr   r   r   r   r   r   r   r   r	   r   Zconverter_tor   r   r   r   r   r   r   r   r"   1   s   









   "   '	
"

r"   )ry   ctypesr   r   Zwillow.imager   r   r   r   r   r	   r
   r   r   r   r   r   r   	Exceptionr   r   r   r   r!   r"   Zwillow_image_classesr   r   r   r   <module>   s   <  5