Rumah >pembangunan bahagian belakang >Tutorial Python >Buat penjana captcha yang menyeronokkan menggunakan wxPython: dari awal

Buat penjana captcha yang menyeronokkan menggunakan wxPython: dari awal

WBOY
WBOYke hadapan
2023-05-08 18:10:081486semak imbas

1. Pengenalan

Buat penjana captcha yang menyeronokkan menggunakan wxPython: dari awal

2. Teks

Senario aplikasi CAPTCHA terutamanya dalam senario di mana identiti pengguna perlu disahkan atau untuk mengelakkan niat jahat serangan, seperti berikut Senaraikan beberapa senario aplikasi biasa:

  • Pengesahan log masuk pengguna: Gunakan CAPTCHA apabila pengguna log masuk untuk menghalang robot automatik daripada log masuk ke akaun mereka.

  • Pengesahan pendaftaran tapak web: Gunakan CAPTCHA untuk menghalang bot automatik daripada mendaftarkan akaun.

  • Sekatan perangkak web: Sesetengah tapak web mungkin menyekat akses perangkak Menggunakan CAPTCHA boleh menghalang serangan perangkak berniat jahat.

  • Penapisan spam mel: Gunakan CAPTCHA untuk menghalang robot automatik daripada menghantar spam.

  • Tinjauan Dalam Talian: Gunakan CAPTCHA untuk memastikan ketepatan dan kredibiliti hasil tinjauan dalam talian.

  • Komen Tapak Web: Gunakan CAPTCHA untuk menghalang bot automatik daripada menyiarkan ulasan berniat jahat di tapak web anda.

  • Pengesahan: Gunakan CAPTCHA untuk memastikan bahawa hanya pengguna sebenar boleh mengakses maklumat atau sumber sensitif.

Secara amnya, senario aplikasi CAPTCHA adalah sangat luas dalam senario di mana identiti pengguna perlu disahkan atau untuk menghalang serangan robot automatik.

3. Contoh analisis

import wx
import random
import string
from PIL import Image, ImageDraw, ImageFont
 
 
class MyFrame(wx.Frame):
    def __init__(self, parent):
        super().__init__(parent, title="CAPTCHA Generator", size=(300, 200))
        panel = wx.Panel(self)
        button = wx.Button(panel, label="Generate CAPTCHA", pos=(0, 0))
        self.Bind(wx.EVT_BUTTON, self.on_button_click, button)
        # 创建一个静态图片控件
        self.static_bitmap = wx.StaticBitmap(panel, -1, size=(200, 80), pos=(40, 60))
    def on_button_click(self, event):
        # Set the dimensions of the image
        IMAGE_WIDTH = 200
        IMAGE_HEIGHT = 80
 
        # Generate a random string of characters to use as the CAPTCHA text
        captcha_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))
 
        # Create a blank image and get a drawing context
        image = Image.new('RGB', (IMAGE_WIDTH, IMAGE_HEIGHT), color = (255, 255, 255))
        draw = ImageDraw.Draw(image)
 
        # Generate a random color for the text
        text_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
 
        # Load a TrueType font file to use for the text
        font = ImageFont.truetype('arial.ttf', 36)
 
        # Draw the CAPTCHA text on the image
        x0, y0, x1, y1 = draw.textbbox((0, 0), captcha_text, font=font)
        text_width = x1 - x0
        text_height = y1 - y0
        x = (IMAGE_WIDTH - text_width) / 2
        y = (IMAGE_HEIGHT - text_height) / 2
        draw.text((x, y), captcha_text, fill=text_color, font=font)
 
        # Add some noise to the image by drawing randomly placed dots
        for i in range(500):
            x = random.randint(0, IMAGE_WIDTH - 1)
            y = random.randint(0, IMAGE_HEIGHT - 1)
            draw.point((x, y), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
 
        # Save the image as a PNG file with the CAPTCHA text as the filename
        image.save(captcha_text + '.png', 'PNG')
        # 加载PNG图片文件并显示在静态图片控件中
        bitmap = wx.Bitmap(captcha_text + '.png', wx.BITMAP_TYPE_PNG)
        self.static_bitmap.SetBitmap(bitmap)
if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame(None)
    frame.Show(True)
    app.MainLoop()

Atas ialah kandungan terperinci Buat penjana captcha yang menyeronokkan menggunakan wxPython: dari awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam