イメージジェネレータ
Pillowパッケージの助けを借りてPythonを使用してランダムなcaptchaイメージを作成するロジックを構築します.
For more detailed reference about pillow check this.
このコマンドを使用してこのパッケージをインストールします
コードのこの部分は、90 x 60で白いイメージを作成して、BlankRangeイメージを保存しました.PNG
今、我々はイメージを作成し、それを保存し、それにいくつかのテキストを追加することができます
画像に線を引く
(40,30)は1行目の開始点であり(150300)で終了する.
終了点がイメージサイズより大きいことに注意してください.
1行目と同じように、行2は( 20 , 30 )から始まり( 30 , 20 )
もう少し追加しましょう
画像の点を描画する
この短縮ロジックはURL短縮語で使用されます
RandomHeight文字列関数は長さ5のランダムな文字列を生成します.
ラムダとは
は1行、1つの式で特別な関数です.複数の引数を得ることができます.
注: 85は取られません
あなたは、各々の新しいイメージの線と点を無作為化するのに用いられるコード
これに使用されるフォントはgoogle fonts
https://fonts.google.com/specimen/Sansita+Swashed
注:文字列内の値(バックエンド)を検証するには、文字列をセッションに格納するか、独自の方法を使用できます.
より詳細な画像を生成するには、いくつかの小さな画像を使用して異なる図形をランダムにスローします.
For more detailed reference about pillow check this.
このコマンドを使用してこのパッケージをインストールします
pip install pillow
新しいイメージを作る
コードのこの部分は、90 x 60で白いイメージを作成して、BlankRangeイメージを保存しました.PNG
from PIL import Image
img = Image.new('RGB', (90, 60), color = 'white')
img.save('blank_image.png')
BlanankRangeイメージ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
は、Poin 10 x 10でIMGオブジェクトで書かれます線を引く
画像に線を引く
draw.line((40,30, 150,300), fill=120, width=1)
draw.line((20,30, 30,20), fill=88, width=2)
塗りつぶし色と幅のサイズを設定します.(40,30)は1行目の開始点であり(150300)で終了する.
終了点がイメージサイズより大きいことに注意してください.
1行目と同じように、行2は( 20 , 30 )から始まり( 30 , 20 )
描画ポイント
もう少し追加しましょう
画像の点を描画する
draw.point(((30, 40), (10, 20), (14, 25), (35, 10), (14, 28), (17, 25)), fill="black")
これは、与えられたXY座標でイメージの点点をスローします.キャプチャ文字列を生成する
この短縮ロジックはURL短縮語で使用されます
RandomHeight文字列関数は長さ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
Pythonラムダ関数
ラムダとは
は1行、1つの式で特別な関数です.複数の引数を得ることができます.
# 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