B
    CDb                 @   sj   d dl Z d dlmZmZmZ yd dlmZ W n  ek
rL   d dlmZ Y nX G dd de	Z
dd ZdS )    N)Image	ImageDraw	ImageFont)StringIOc               @   sN   e Zd Zdd Zedd Zedd Zdd Zd	d
 ZdddZ	dd Z
dS )RandomCaptchac             C   s"   d| _ d| _d| _d| _d| _d S )Nd   2         )widthheight
code_count
line_countpoint_count)self r   5G:\easytimepro\master/mysite/base\generate_captcha.py__init__   s
    zRandomCaptcha.__init__c              C   s.   t dd} t dd}t dd}| ||fS )Nr      )randomrandint)rgbr   r   r   get_random_rgb   s    zRandomCaptcha.get_random_rgbc           9   C   s   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9g9} t | }|S ):NABCDEFGHJKLMNPQRSTUVWXYZar   cdefr   hijkmnpqr   stuvwxyz123456789)r   Zchoice)Z
random_numrandom_charr   r   r   get_random_char   s
    &&*
zRandomCaptcha.get_random_charc             C   sl   xft | jD ]X}td| j}td| j}td| j}td| j}|jd|| j|f|  d qW d S )Nr   )fill)ranger   r   r   r   r   liner   )r   drawr9   Zx1Zx2Zy1Zy2r   r   r   	draw_line&   s    zRandomCaptcha.draw_linec             C   sx   xrt | jD ]d}|jtd| jtd| jg|  d td| j}td| j}|j||||fdddd qW d S )Nr   )rS   Z   z#fff)	rT   r   Zpointr   r   r   r   r   Zarc)r   rV   r9   rE   rF   r   r   r   
draw_point.   s
    *zRandomCaptcha.draw_pointNc       
      C   s   dd l }ddlm} g }|j|jd}tj|dd}xLt| j	D ]>}| 
 }|jd|d  | jd d f|d	|d
 || qBW d|}	|	S )Nr   )settingsztimesbd.ttf   )size
      r
   ZBlue)font )osZdjango.confrZ   pathjoinZADDITION_FILE_ROOTr   ZtruetyperT   r   rR   textr   append)
r   rV   r_   ra   rZ   ZtempZttf_pathr9   rQ   	valid_strr   r   r   draw_content5   s    (
zRandomCaptcha.draw_contentc             C   sZ   t  }td| j| jfd}t|}| |}| | | 	| |j
|dd ||fS )NZRGBz#cfd3d3Zpng)format)r   r   newr   r   r   ZDrawrg   rW   rY   Zsave)r   outputZimagerV   rf   r   r   r   draw_imgB   s    



zRandomCaptcha.draw_img)N)__name__
__module____qualname__r   staticmethodr   rR   rW   rY   rg   rk   r   r   r   r   r      s   
r   c             C   sl   dd l }ddlm} | jdd }|r0|| t| dd}t	 }|
 \}}|||d ||fS )Nr   )cachecaptcha-r`   i,  )uuidZdjango.core.cacherp   ZsessiongetdeletestrZuuid4replacer   rk   set)Zrequestrs   rp   Zpre_keykeyrq   Zcaptcha_imgpwdr   r   r   get_captchaM   s    
r{   )r   ZPILr   r   r   Z	cStringIOr   ModuleNotFoundErrorioobjectr   r{   r   r   r   r   <module>   s   ?