Heim >Backend-Entwicklung >Python-Tutorial >PythonPIL-Modul und Methode zur zufälligen Generierung chinesischer Verifizierungscodes
Was wir heute lernen werden, ist, wie man mit Python einen zufälligen chinesischen Bestätigungscode generiert und das Bild im .jpeg-Format speichert. Freunde, die es benötigen, können darauf verweisen
Davor müssen Sie Verstehen Sie zunächst die PIL-Bibliothek in Python. PIL ist die Abkürzung für Python Imaging Library. PIL ist eine Python-Bildverarbeitungsbibliothek, die eine Reihe von Modulen und Methoden bereitstellt, z. B. Zuschneiden, Verschieben, Drehen, Ändern der Größe usw. In der PIL-Bibliothek wird jedes Bild durch ein Image-Objekt dargestellt. Um ein Bild zu laden, lautet die einfachste Form also wie folgt:
from PIL import Image image = Image.open("1.jpeg")
In der PIL-Bibliothek sind die am häufigsten verwendeten Module Image, ImageDraw, ImageEnhance, ImageFile usw.
Die Download-Adresse von PIL lautet: http://www.pythonware.com/products/pil/
Als nächstes lernen Sie einige allgemeine Vorgänge in PIL kennen:
(1) Ändern Sie die Bildgröße
from PIL import Image image = Image.open("1.jpeg") new_img = image.resize((256,256),Image.BILINEAR) new_img.save("2.jpeg")
(2) Drehen Sie das Bild
from PIL import Image image = Image.open("1.jpeg") new_img = image.rotate(45) new_img.save("2.jpeg")
(3) Linienzeichnung
Das ImageDraw-Modul in der PIL-Bibliothek bietet grundlegende Funktionen zum Grafikzeichnen, mit denen gerade Linien, Bögen, Ellipsen, Rechtecke usw. gezeichnet werden können.
from PIL import Image,ImageDraw image = Image.open("2.jpeg") draw = ImageDraw.Draw(image) width,height = image.size draw.line(((0,0),(width-1,height-1)),fill=255) draw.line(((0,height-1),(width-1,0)),fill=255) image.save("2.jpeg")
(4) Zeichne einen Kreis
from PIL import Image,ImageDraw image = Image.open("2.jpeg") draw = ImageDraw.Draw(image) width,height = image.size draw.arc((0,0,width-1,height-1),0,360,fill=255) image.save("2.jpeg")
Weitere Methoden finden Sie in der Hilfedokumentation.
Lassen Sie uns nun untersuchen, wie Sie mit Python chinesische Bestätigungscodes generieren. Tatsächlich ist diese Frage einfach. Wir alle wissen, dass Verifizierungscodes im Allgemeinen verwendet werden, um zu verhindern, dass Netzwerkmaschinen unbegrenzte Anmeldeversuche zum Knacken von Passwörtern verwenden. Dann müssen wir zur Überprüfung zufällig chinesische Zeichen generieren 🎜>
des Bildes erscheint sehr unscharf, was die Robotererkennung effektiv verhindert. Zusätzlich zur zufälligen Generierung chinesischer Zeichen müssen wir also auch einige Interferenzlinien usw. hinzufügen.# -*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont import random import math, string class RandomChar(): @staticmethod def Unicode(): val = random.randint(0x4E00, 0x9FBF) return unichr(val) @staticmethod def GB2312(): head = random.randint(0xB0, 0xCF) body = random.randint(0xA, 0xF) tail = random.randint(0, 0xF) val = ( head << 8 ) | (body << 4) | tail str = "%x" % val return str.decode('hex').decode('gb2312') class ImageChar: def __init__(self, fontColor = (0, 0, 0), size = (100, 40), fontPath = 'SIMSUN.TTC', bgColor = (255, 255, 255), fontSize = 20): self.size = size self.fontPath = fontPath self.bgColor = bgColor self.fontSize = fontSize self.fontColor = fontColor self.font = ImageFont.truetype(self.fontPath, self.fontSize) self.image = Image.new('RGB', size, bgColor) def rotate(self): self.image.rotate(random.randint(0, 30), expand=0) def drawText(self, pos, txt, fill): draw = ImageDraw.Draw(self.image) draw.text(pos, txt, font=self.font, fill=fill) def randRGB(self): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def randPoint(self): (width, height) = self.size return (random.randint(0, width), random.randint(0, height)) def randLine(self, num): draw = ImageDraw.Draw(self.image) for i in range(0, num): draw.line([self.randPoint(), self.randPoint()], self.randRGB()) def randChinese(self, num): gap = 5 start = 0 for i in range(0, num): char = RandomChar().GB2312() x = start + self.fontSize * i + random.randint(0, gap) + gap * i self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB()) self.rotate() self.randLine(18) def save(self, path): self.image.save(path) ic = ImageChar(fontColor=(100,211, 90)) ic.randChinese(4) ic.save("1.jpeg")Laufende Ergebnisse:
Weitere PythonPIL-Module und zufällig generierte chinesische For Beachten Sie bitte die chinesische PHP-Website für Artikel, die sich auf Verifizierungscode-Methoden beziehen!