Python PIL module and randomly generated Chinese verification code,

Source: Internet
Author: User

Python PIL module and randomly generated Chinese verification code,

Before that, you must first understand the PIL library in Python. PIL is short for Python Imaging Library. PIL is a Python image processing Library that provides a series of modules and methods, such as cropping, translating, rotating, and changing the size. In the PIL library, any Image is represented by an Image object. Therefore, the simplest form of loading an Image is as follows:

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

In the PIL library, the most common modules are Image, ImageDraw, ImageEnhance, and ImageFile.
PIL: http://www.pythonware.com/products/pil/
Next, we will learn some common operations in PIL:

(1) Change the image size

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

(2) Rotating Images

from PIL import Imageimage = Image.open("1.jpeg")new_img = image.rotate(45)new_img.save("2.jpeg")

(3) draw a straight line

The ImageDraw module in the PIL Library provides the basic functions for drawing graphs, such as straight lines, arcs, ovans, and rectangles.

from PIL import Image,ImageDrawimage = Image.open("2.jpeg")draw = ImageDraw.Draw(image)width,height = image.sizedraw.line(((0,0),(width-1,height-1)),fill=255)draw.line(((0,height-1),(width-1,0)),fill=255)image.save("2.jpeg")

(4) Draw circles

from PIL import Image,ImageDrawimage = Image.open("2.jpeg")draw = ImageDraw.Draw(image)width,height = image.sizedraw.arc((0,0,width-1,height-1),0,360,fill=255)image.save("2.jpeg")

For more methods, see the help documentation.

Now we will study how to use Python to generate a Chinese verification code. In fact, this problem is simple. We all know that the verification code is generally used to prevent network machines.

Users use an unlimited number of logon attempts to crack the password, so we need to randomly generate Chinese characters for this image for verification. Generally, the Word Table of the image will be

It is very fuzzy, which effectively prevents robot recognition. Therefore, in addition to generating Chinese characters randomly, we also need to add some interference lines.

# -*- coding: utf-8 -*-from PIL import Image,ImageDraw,ImageFontimport randomimport 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")

Running result:

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.