Changeset 3128 in products for quintagroup.captcha.core/trunk/quintagroup/captcha/core/utils.py
- Timestamp:
- Apr 18, 2011 11:16:39 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.captcha.core/trunk/quintagroup/captcha/core/utils.py
r3097 r3128 19 19 import Crypto 20 20 21 21 22 def encrypt1(s): 22 23 return md5.md5(s).hexdigest().upper() 23 24 25 24 26 def getTransform(x, y, a, p, o): 25 return (math.sin( (y+o[0])*p )*a + x, math.sin( (x+o[1])*p )*a + y) 27 return (math.sin((y + o[0]) * p) * a + x, math.sin((x + o[1]) * p) * a + y) 28 26 29 27 30 def gen_captcha(**kwargs): … … 57 60 58 61 #select font for captcha text 59 ALL_FONTS=('Bd', 'It', 'MoBI', 'Mono', 'Se', 'BI', 'MoBd', 'MoIt', 'SeBd', '') 62 ALL_FONTS = ('Bd', 'It', 'MoBI', 'Mono', 'Se', 63 'BI', 'MoBd', 'MoIt', 'SeBd', '') 60 64 rand_font = random.choice(ALL_FONTS) 61 font = ImageFont.truetype(FONT_PATH+'/vera/Vera%s.ttf'%rand_font, fnt_sz) 65 rand_font_path = FONT_PATH + '/vera/Vera%s.ttf' % rand_font 66 font = ImageFont.truetype(rand_font_path, fnt_sz) 62 67 textSize = font.getsize(text) 63 68 64 69 #------------------------------render background1 ----------------------- 65 image = Image.new('RGB', (textSize[0] +7,textSize[1]+7), bkground)70 image = Image.new('RGB', (textSize[0] + 7, textSize[1] + 7), bkground) 66 71 image.paste(bkground) 67 72 #------------------------------render Text2 ------------------------ 68 73 draw = ImageDraw.Draw(image) 69 alignment = (random.uniform(0, 1), random.uniform(0,1))74 alignment = (random.uniform(0, 1), random.uniform(0, 1)) 70 75 x = int((image.size[0] - textSize[0]) * alignment[0] + 0.5) 71 76 y = int((image.size[1] - textSize[1]) * alignment[1] + 0.5) 72 77 73 draw.text((x, y), text, font=font, fill=font_color)78 draw.text((x, y), text, font=font, fill=font_color) 74 79 75 80 #------------------------------render Distortion ----------------------- … … 85 90 yRow = [] 86 91 for i in xrange(xPoints): 87 x, y = getTransform(i *r, j*r, amplitude, period, offset)92 x, y = getTransform(i * r, j * r, amplitude, period, offset) 88 93 89 94 # Clamp the edges so we don't get black undefined areas 90 x = max(0, min(image.size[0] -1, x))91 y = max(0, min(image.size[1] -1, y))95 x = max(0, min(image.size[0] - 1, x)) 96 y = max(0, min(image.size[1] - 1, y)) 92 97 93 98 xRow.append(x) … … 99 104 # each square between points on the grid 100 105 mesh = [] 101 for j in xrange(yPoints -1):102 for i in xrange(xPoints -1):106 for j in xrange(yPoints - 1): 107 for i in xrange(xPoints - 1): 103 108 mesh.append(( 104 109 # Destination rectangle 105 (i *r, j*r,106 (i +1)*r, (j+1)*r),110 (i * r, j * r, 111 (i + 1) * r, (j + 1) * r), 107 112 # Source quadrilateral 108 (xRows[j ][i ], yRows[j ][i],109 xRows[j +1][i ], yRows[j+1][i],110 xRows[j +1][i+1], yRows[j+1][i+1],111 xRows[j ][i+1], yRows[j ][i+1]),113 (xRows[j][i], yRows[j][i], 114 xRows[j + 1][i], yRows[j + 1][i], 115 xRows[j + 1][i + 1], yRows[j + 1][i + 1], 116 xRows[j][i + 1], yRows[j][i + 1]), 112 117 )) 113 118 … … 120 125 size = len(src) 121 126 sys.modules['ImageFile'] = ImageFile 122 return {'src': src, 'size':size}127 return {'src': src, 'size': size} 123 128 124 129 … … 127 132 return words[index] 128 133 134 129 135 def getIndex(word): 130 136 words = basic_english.words.split() … … 132 138 res = words.index(word) 133 139 except ValueError: 134 res = getLen() +1140 res = getLen() + 1 135 141 return res 142 136 143 137 144 def getCaptchasCount(dynamic): … … 141 148 return CAPTCHAS_COUNT 142 149 150 143 151 def formKey(num): 144 152 def normalize(s): 145 return (not len(s) %8 and s) or normalize(s+str(randint(0, 9)))153 return (not len(s) % 8 and s) or normalize(s + str(randint(0, 9))) 146 154 147 return normalize('%s_%i_'%(str(DateTime().timeTime()), num)) 155 return normalize('%s_%i_' % (str(DateTime().timeTime()), num)) 156 148 157 149 158 def encrypt(key, s): 150 159 return toHex(Crypto.new(key).encrypt(s)) 151 160 161 152 162 def decrypt(key, s): 153 163 return Crypto.new(key).decrypt(toStr(s)) 164 154 165 155 166 def parseKey(s): … … 157 168 if ps is None: 158 169 return {'date': '', 'key': ''} 159 return {'date': ps.group(1), 'key':ps.group(2)} 170 return {'date': ps.group(1), 'key': ps.group(2)} 171 160 172 161 173 def toHex(s): … … 164 176 hv = hex(ord(ch)).replace('0x', '') 165 177 if len(hv) == 1: 166 hv = '0' +hv178 hv = '0' + hv 167 179 lst.append(hv) 168 180 169 return reduce(lambda x,y:x+y, lst) 181 return reduce(lambda x, y: x + y, lst) 182 170 183 171 184 def toStr(s):
Note: See TracChangeset
for help on using the changeset viewer.