o
    ʷ6i                     @   sH   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd deZ	dS )	z+
Wand (>=v0.3.0) engine for Sorl-thumbnail
    )
exceptions)Image)MAGICK_VERSION_NUMBER)
EngineBasec                   @   s^   e Z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 Z
dd ZdddZdS )Enginec                 C   s   t | dS )Nblob)r   read)selfsource r   g/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/sorl/thumbnail/engines/wand_engine.py	get_image   s   zEngine.get_imagec                 C   s   |j S N)sizer
   imager   r   r   get_image_size   s   zEngine.get_image_sizec              	   C   s.   zt |d W dS  tjtjfy   Y dS w )z
        Wand library makes sure when opening any image that is fine, when
        the image is corrupted raises an exception.
        r   TF)r   r   CorruptImageErrorMissingDelegateError)r
   raw_datar   r   r   is_valid_image   s   
zEngine.is_valid_imagec                 C   s   |j }|dkr|  nG|dkr|jdd n<|dkr |  n3|dkr/|jdd |  n$|dkr:|jdd n|d	krI|jd
d |  n
|dkrS|jd
d d|_ |S )N	top_rightbottom_right   )degreebottom_leftleft_topZ   	right_topright_bottomileft_bottomtop_left)orientationfloprotateflip)r
   r   r#   r   r   r   _orientation   s&   



zEngine._orientationc                 C   s
   |j dv S )N)r   r   r    r!   )r#   r   r   r   r   _flip_dimensions4   s   
zEngine._flip_dimensionsc                 C   sl   |dkr|j rtdk rd|_|S d|_|S d|_|S |dkr4|j r/tdk r*d|_|S d|_|S d	|_|S |S )
NRGBi   truecolormattetruecoloralpha	truecolorGRAYgrayscalemattegrayscalealpha	grayscale)alpha_channelr   type)r
   r   
colorspacer   r   r   _colorspace7   s&   zEngine._colorspacec                 C   s   | || |S r   )resize)r
   r   widthheightr   r   r   _scaleL   s   zEngine._scalec                 C   s   |j ||||d |S N)lefttopr6   r7   crop)r
   r   r6   r7   x_offsety_offsetr   r   r   _cropP   s   zEngine._cropc                 C   s   |j |||| || d |S r9   r<   )r
   r   xyx2y2r   r   r   _cropboxT   s   zEngine._cropboxNFc                 C   s.   ||_ |dkr|rd|_| S ||_| S )NJPEGpjpeg)compression_qualityformat	make_blob)r
   r   format_quality
image_infoprogressiver   r   r   _get_raw_dataX   s   zEngine._get_raw_data)NF)__name__
__module____qualname__r   r   r   r'   r(   r4   r8   r@   rE   rO   r   r   r   r   r      s    r   N)
__doc__wandr   
wand.imager   wand.versionr   sorl.thumbnail.engines.baser   r   r   r   r   r   <module>   s    