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")
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")
(2) Faire pivoter l'image
from PIL import Image image = Image.open("1.jpeg") new_img = image.rotate(45) new_img.save("2.jpeg")
(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")
(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")
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('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")
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 !