55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
|
import random
|
|||
|
import os
|
|||
|
from PIL import Image
|
|||
|
import base64
|
|||
|
from io import BytesIO
|
|||
|
|
|||
|
# Angles we'll rotate the original by
|
|||
|
# when we create n rotations
|
|||
|
def calculate_angles(n):
|
|||
|
return list(range(0, 360, 360 // n))
|
|||
|
|
|||
|
def rotate_img(img_path, angle):
|
|||
|
original_img = Image.open(img_path)
|
|||
|
rotated = original_img.rotate(angle)
|
|||
|
buffered = BytesIO()
|
|||
|
rotated.save(buffered, format="PNG")
|
|||
|
b64_rot = base64.b64encode(buffered.getvalue())
|
|||
|
return b64_rot.decode("utf-8")
|
|||
|
|
|||
|
def captchafy(img_path, n=6):
|
|||
|
angles = calculate_angles(n)
|
|||
|
|
|||
|
rotated_imgs = [
|
|||
|
{
|
|||
|
'original': False,
|
|||
|
'image': rotate_img(img_path, angle)
|
|||
|
} for angle in angles]
|
|||
|
|
|||
|
rotated_imgs[0]['original'] = True
|
|||
|
|
|||
|
random.shuffle(rotated_imgs)
|
|||
|
|
|||
|
correct_img = None
|
|||
|
for index, img in enumerate(rotated_imgs):
|
|||
|
if img['original']:
|
|||
|
correct_img = index
|
|||
|
|
|||
|
return correct_img, [img['image'] for img in rotated_imgs]
|
|||
|
|
|||
|
def random_image(dir='images/'):
|
|||
|
dir_contents = os.listdir(dir)
|
|||
|
random_image = random.choice(dir_contents)
|
|||
|
return dir + random_image
|
|||
|
|
|||
|
def resize_dir(size=150, dir='images/'):
|
|||
|
for img_file in os.listdir(dir):
|
|||
|
img = Image.open(dir + img_file)
|
|||
|
width, height = img.size
|
|||
|
print(width, height)
|
|||
|
if not (width > size or height > size):
|
|||
|
continue
|
|||
|
|
|||
|
img.thumbnail((size, size),Image.ANTIALIAS)
|
|||
|
img.save(dir + img_file)
|