>  기사  >  백엔드 개발  >  pythonPIL 모듈 및 중국어 인증코드 무작위 생성 방법

pythonPIL 모듈 및 중국어 인증코드 무작위 생성 방법

高洛峰
高洛峰원래의
2017-03-07 16:16:291480검색

오늘 배울 내용은 Python을 사용해 임의의 중국어 인증코드를 생성하고 이미지를 .jpeg 형식으로 저장하는 방법입니다. 필요한 친구들이 참고하면 됩니다.

그 전에 꼭 먼저 Python의 PIL 라이브러리를 이해하십시오. PIL은 Python Imaging Library의 약어입니다. PIL은 자르기, 변환, 회전, 크기 변경 등과 같은 일련의 모듈과 방법을 제공하는 Python 이미지 처리 라이브러리입니다. PIL 라이브러리에서 모든 이미지는 Image 객체로 표시되므로 이미지를 로드하는 가장 간단한 형식은 다음과 같습니다.

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

In 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 모듈 및 무작위로 생성된 중국어 확인 코드 메소드 관련 글은 PHP 중국어 홈페이지를 주목해주세요! pythonPIL 모듈 및 중국어 인증코드 무작위 생성 방법

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.