Heim  >  Artikel  >  Backend-Entwicklung  >  PythonPIL-Modul und Methode zur zufälligen Generierung chinesischer Verifizierungscodes

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

高洛峰
高洛峰Original
2017-03-07 16:16:291481Durchsuche

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(&#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")
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

Stellungnahme:
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