PythonPIL-Modul und Methode zur zufälligen Generierung chinesischer Verifizierungscodes

高洛峰
Freigeben: 2017-03-07 16:16:29
Original
1470 Leute haben es durchsucht

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")
Nach dem Login kopieren

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")
Nach dem Login kopieren

(2) Drehen Sie das Bild

from PIL import Image

image = Image.open("1.jpeg")
new_img = image.rotate(45)
new_img.save("2.jpeg")
Nach dem Login kopieren

(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")
Nach dem Login kopieren

(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")
Nach dem Login kopieren

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(&#39;hex&#39;).decode(&#39;gb2312&#39;) 

class ImageChar:
 def __init__(self, fontColor = (0, 0, 0),
           size = (100, 40),
           fontPath = &#39;SIMSUN.TTC&#39;,
           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(&#39;RGB&#39;, 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")
Nach dem Login kopieren
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! PythonPIL-Modul und Methode zur zufälligen Generierung chinesischer Verifizierungscodes

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!