ホームページ  >  記事  >  バックエンド開発  >  pythonPIL モジュールと中国語の検証コードをランダムに生成する方法

pythonPIL モジュールと中国語の検証コードをランダムに生成する方法

高洛峰
高洛峰オリジナル
2017-03-07 16:16:291422ブラウズ

今日学習するのは、Python を使用してランダムな中国語の検証コードを生成し、画像を .jpeg 形式で保存して、必要な友達が参照できるようにする方法です。

その前に、まず の PIL ライブラリを理解する必要があります。パイソン。 PIL は Python Imaging Library の略で、トリミング、移動、回転、サイズ変更などの一連のモジュールとメソッドを提供する画像処理ライブラリです。 PIL ライブラリでは、すべての画像は Image オブジェクトによって表されるため、画像を読み込むための最も単純な形式は次のとおりです:

from PIL import Image
image = Image.open("1.jpeg")

PIL ライブラリで最も一般的に使用されるモジュールは、Image、ImageDraw、 ImageEnhance、ImageFileなど
PIL のダウンロード アドレスは次のとおりです: http://www.pythonware.com/products/pil/

次に、PIL の一般的な操作をいくつか学びます:

(1) 画像サイズを変更します

from PIL import Image

image = Image.open("1.jpeg")
new_img = image.resize((256,256),Image.BILINEAR)
new_img.save("2.jpeg")

(2) 画像の回転

from PIL import Image

image = Image.open("1.jpeg")
new_img = image.rotate(45)
new_img.save("2.jpeg")

(3) 線描画

PIL ライブラリの ImageDraw モジュールは、直線、円弧、楕円、長方形などを描画できるグラフィック描画の基本機能を提供します。

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) 円を描く

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")

その他の方法については、ヘルプドキュメントを参照してください。


それでは、Python を使用して中国語の検証コードを生成する方法を学習してみましょう。実際、この質問は簡単です。一般に、ネットワーク マシンがパスワードを解読するために無制限にログインを試行するのを防ぐために検証コードが使用されることは、一般的に、この画像を検証するためにランダムに生成する必要があることを知っています。単語リスト

が非常にぼやけて表示されるため、ロボットの認識が事実上妨げられます。したがって、漢字をランダムに生成することに加えて、干渉線などを追加する必要もあります。


# -*- 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")

操作結果:

pythonPIL モジュールと中国語の検証コードをランダムに生成する方法 pythonPIL モジュールおよびランダムに生成された中国語の検証コード方法に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。