보안 문자 이미지 생성기
For more detailed reference about pillow check this.
이 명령을 사용하여 이 패키지를 설치합니다.
pip install pillow
새 이미지 만들기
이 코드는 90X60의 흰색 이미지를 생성하고 blank_image.png를 저장합니다.
from PIL import Image
img = Image.new('RGB', (90, 60), color = 'white')
img.save('blank_image.png')
blank_image.png
이미지에 텍스트 그리기
이제 이미지를 만들어 저장했습니다. 텍스트를 추가해 보겠습니다.
from PIL import Image, ImageDraw
draw = ImageDraw.Draw(img)
draw.text((20,20), "Hello", fill=(38, 38, 38))
img.save('blank_image.png')
Hello
는 10X10 지점의 img 객체에 기록됩니다.선을 그리다
이미지에 선을 그리자
draw.line((40,30, 150,300), fill=120, width=1)
draw.line((20,30, 30,20), fill=88, width=2)
채우기는 색상이고 너비 크기를 설정합니다.
(40,30)은 라인 1의 시작점이며 (150,300)에서 끝납니다.
끝점이 이미지 크기보다 큰 것을 알 수 있으며 생략됩니다.
1행과 동일하게 2행은 (20,30)에서 시작하여 (30,20)에서 끝납니다.
그리기 포인트
더 많은 것을 추가하자
이미지에 점 그리기
draw.point(((30, 40), (10, 20), (14, 25), (35, 10), (14, 28), (17, 25)), fill="black")
이것은 주어진 XY 좌표에서 이미지의 도트 포인트를 던집니다.
캡차 문자열 생성
동일한 논리가 Url Shortener에서 사용되며 여기에서 확인할 수 있습니다.
random_string 함수는 길이가 5인 임의의 문자열을 생성하며 이를 조정할 수 있습니다.
import string, random
# generate thr random captcha string
def random_string():
# hash length
N = 5
s = string.ascii_uppercase + string.ascii_lowercase + string.digits
# generate a random string of length 5
random_string = ''.join(random.choices(s, k=N))
return random_string
파이썬 람다 함수
람다는 무엇입니까?
한 줄과 하나의 표현식이 있는 특수 함수입니다. 여러 인수를 얻을 수 있습니다.
# Normal funtion
def square(a):
return a*a
square(5) ---> 25
# lambda funtion
square = lambda a: a*a
square(5) ---> 25
이미지에서 임의의 위치를 가져오는 람다 함수
# lambda function - used to pick a random loaction in image
getit = lambda : (random.randrange(5, 85),random.randrange(5, 55))
이것은 5와 84 사이의 임의의 값을 무시할 것입니다.
참고: 85개는 사용하지 않음
random.randrange(5, 85)
무작위로 선택되는 색상 값
# pick a random colors for points
colors = ["black","red","blue","green",(64, 107, 76),(0, 87, 128),(0, 3, 82)]
fill_color = [120,145,130,89,58,50,75,86,98,176,]
# pick a random colors for lines
fill_color = [(64, 107, 76),(0, 87, 128),(0, 3, 82),(191, 0, 255),(72, 189, 0),(189, 107, 0),(189, 41, 0)]
목록에서 임의의 값을 얻으려면 임의의 색상 값을 얻습니다.
random.choice(colors)
captcha 이미지를 생성하는 전체 로직
from PIL import Image, ImageDraw, ImageFont
import string, random
# generate thr random captcha string
def random_string():
# hash length
N = 5
s = string.ascii_uppercase + string.ascii_lowercase + string.digits
# generate a random string of length 5
random_string = ''.join(random.choices(s, k=N))
return random_string
# lambda function - used to pick a random loaction in image
getit = lambda : (random.randrange(5, 85),random.randrange(5, 55))
# pick a random colors for points
colors = ["black","red","blue","green",(64, 107, 76),(0, 87, 128),(0, 3, 82)]
# fill_color = [120,145,130,89,58,50,75,86,98,176,]
# pick a random colors for lines
fill_color = [(64, 107, 76),(0, 87, 128),(0, 3, 82),(191, 0, 255),(72, 189, 0),(189, 107, 0),(189, 41, 0)]
# generate thr random captcha string
def random_string():
# hash length
N = 5
s = string.ascii_uppercase + string.ascii_lowercase + string.digits
# generate a random string of length 5
random_string = ''.join(random.choices(s, k=N))
return random_string
# generate the captcha image
def gen_captcha_img():
# create a img object
img = Image.new('RGB', (90, 60), color="white")
draw = ImageDraw.Draw(img)
# get the random string
captcha_str = random_string()
# get the text color
text_colors = random.choice(colors)
font_name = "fonts/SansitaSwashed-VariableFont_wght.ttf"
font = ImageFont.truetype(font_name, 18)
draw.text((20,20), captcha_str, fill=text_colors, font=font)
# draw some random lines
for i in range(5,random.randrange(6, 10)):
draw.line((getit(), getit()), fill=random.choice(fill_color), width=random.randrange(1,3))
# draw some random points
for i in range(10,random.randrange(11, 20)):
draw.point((getit(), getit(), getit(), getit(), getit(), getit(), getit(), getit(), getit(), getit()), fill=random.choice(colors))
# save image in captcha_img directory
img.save("captcha_img/"+ captcha_str +".png")
return True
**WE MADE IT** 🥳🥳🥳
각각의 새 이미지에서 선과 점을 임의로 지정하는 데 사용되는 코드
for i in range(5,random.randrange(6, 10)):
를 확인할 수 있습니다.여기에 사용된 글꼴은 google fonts입니다.
https://fonts.google.com/specimen/Sansita+Swashed
참고: 문자열의 값(백엔드)을 확인하려면 문자열을 세션에 저장하거나 고유한 방식을 사용할 수 있습니다.
더 자세한 이미지를 생성하려면 모양이 다른 작은 이미지를 사용하고 무작위로 던집니다.
더 많은 기사
감사합니다. 좋은 하루 되세요.🤪😎
Reference
이 문제에 관하여(보안 문자 이미지 생성기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/magesh236/captcha-image-generator-python-7ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)