module pythonPIL et méthode de génération aléatoire de codes de vérification chinois

高洛峰
Libérer: 2017-03-07 16:16:29
original
1471 Les gens l'ont consulté

Ce que nous allons apprendre aujourd'hui, c'est comment utiliser Python pour générer un code de vérification chinois aléatoire et enregistrer l'image au format .jpeg. Les amis qui en ont besoin peuvent s'y référer

Avant cela, vous devez. comprenez d’abord la bibliothèque PIL en Python. PIL est l'abréviation de Python Imaging Library. PIL est une bibliothèque Python pour le traitement d'images. Elle fournit une série de modules et de méthodes, tels que : le recadrage, la traduction, la rotation, la modification de la taille, etc. Dans la bibliothèque PIL, toute image est représentée par un objet Image, donc pour charger une image, la forme la plus simple est la suivante :

from PIL import Image
image = Image.open("1.jpeg")
Copier après la connexion

Dans la bibliothèque PIL, les modules les plus couramment utilisés sont Image, ImageDraw, ImageEnhance, ImageFile, etc.
L'adresse de téléchargement de PIL est : http://www.pythonware.com/products/pil/

Ensuite, découvrez quelques opérations courantes dans PIL :

(1) Changer la taille de l'image

from PIL import Image

image = Image.open("1.jpeg")
new_img = image.resize((256,256),Image.BILINEAR)
new_img.save("2.jpeg")
Copier après la connexion

(2) Faire pivoter l'image

from PIL import Image

image = Image.open("1.jpeg")
new_img = image.rotate(45)
new_img.save("2.jpeg")
Copier après la connexion

(3) Dessin au trait

Le module ImageDraw de la bibliothèque PIL fournit des fonctions de base de dessin graphique, qui peuvent dessiner des lignes droites, des arcs, des ellipses, des rectangles, etc.

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")
Copier après la connexion

(4) Dessinez un cercle

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")
Copier après la connexion

Pour plus de méthodes, consultez la documentation d'aide.


Etudions maintenant comment utiliser Python pour générer des codes de vérification chinois. En fait, cette question est simple. Nous savons tous que les codes de vérification sont généralement utilisés pour empêcher les machines du réseau d'utiliser des tentatives de connexion illimitées pour déchiffrer les mots de passe. Ensuite, nous devons générer aléatoirement des caractères chinois pour que cette image soit vérifiée. 🎜>

de l'image apparaîtra très floue, ce qui empêchera efficacement la reconnaissance du robot. Ainsi, en plus de générer des caractères chinois de manière aléatoire, nous devons également ajouter des lignes d'interférence, etc.


# -*- 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")
Copier après la connexion
Résultats en cours d'exécution :

Plus de modules pythonPIL et de chinois générés aléatoirement pour articles liés aux méthodes de code de vérification, veuillez faire attention au site Web PHP chinois ! module pythonPIL et méthode de génération aléatoire de codes de vérification chinois

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!