🦺 更新验证码混淆程度(我自己都过不了)
This commit is contained in:
1 parent
d5a67ce77e
commit
c592b02636
1 file changed
+12
-6
@@ -56,28 +56,34 @@ def generate_text():
|
|||||||
|
|
||||||
def generate_image(text):
|
def generate_image(text):
|
||||||
width, height = 160, 50
|
width, height = 160, 50
|
||||||
bg = random.choice([(255, 255, 255), (240, 240, 240), (230, 240, 250)])
|
bg = (random.randint(1,256), random.randint(1,256), random.randint(1,256))
|
||||||
img = Image.new('RGB', (width, height), bg)
|
img = Image.new('RGB', (width, height), bg)
|
||||||
draw = ImageDraw.Draw(img)
|
draw = ImageDraw.Draw(img)
|
||||||
|
|
||||||
for i, ch in enumerate(text):
|
for i, ch in enumerate(text):
|
||||||
color = random.choice([(30, 30, 30), (50, 80, 150), (150, 50, 50), (50, 130, 50)])
|
color = (random.randint(1,256), random.randint(1,256), random.randint(1,256))
|
||||||
y = random.randint(2, 12)
|
y = random.randint(2, 12)
|
||||||
x = 15 + i * 32 + random.randint(-3, 3) # 4 位字符在 160px 宽度内均匀分布
|
x = 15 + i * 32 + random.randint(-3, 3) # 4 位字符在 160px 宽度内均匀分布
|
||||||
try:
|
try:
|
||||||
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
|
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
|
||||||
random.choice([28, 30, 32, 34]))
|
random.choice(range(20,40,2)))
|
||||||
except (IOError, OSError):
|
except (IOError, OSError):
|
||||||
font = ImageFont.load_default()
|
font = ImageFont.load_default()
|
||||||
draw.text((x, y), ch, fill=color, font=font)
|
|
||||||
|
char = Image.new("RGBA", (64, 64), (0,0,0,0))
|
||||||
|
draw_char = ImageDraw.Draw(char)
|
||||||
|
draw_char.text((20,20), ch, fill=color, font=font)
|
||||||
|
rotated_char = char.rotate(random.randint(-30, 30), expand=True)
|
||||||
|
img.paste(rotated_char, (x-32, y-32), mask=rotated_char)
|
||||||
|
# draw.text((x, y), ch, fill=color, font=font)
|
||||||
|
|
||||||
for _ in range(4):
|
for _ in range(4):
|
||||||
draw.line([(random.randint(0, width), random.randint(0, height)),
|
draw.line([(random.randint(0, width), random.randint(0, height)),
|
||||||
(random.randint(0, width), random.randint(0, height))],
|
(random.randint(0, width), random.randint(0, height))],
|
||||||
fill=random.choice([(30, 30, 30), (50, 80, 150)]), width=1)
|
fill=(random.randint(1,256), random.randint(1,256), random.randint(1,256)))
|
||||||
for _ in range(50):
|
for _ in range(50):
|
||||||
draw.point((random.randint(0, width - 1), random.randint(0, height - 1)),
|
draw.point((random.randint(0, width - 1), random.randint(0, height - 1)),
|
||||||
fill=random.choice([(30, 30, 30), (50, 80, 150)]))
|
fill=(random.randint(1,256), random.randint(1,256), random.randint(1,256)))
|
||||||
|
|
||||||
buf = io.BytesIO()
|
buf = io.BytesIO()
|
||||||
img.save(buf, format='PNG')
|
img.save(buf, format='PNG')
|
||||||
|
|||||||
Reference in new issue
Block a user