python图像处理-Pillow库常用模块(二)

文章目录

  • 一、绘图(ImageDraw模块)
  • 二、字体和字型处理(ImageFont模块)
  • 三、绘制十字案例
  • 四、绘制验证码

一、绘图(ImageDraw模块)

"""
Python中的ImageDraw模块实现类绘图功能,主要为两方面:
        1.创建图片的方式绘制2D图像
        2.在原有的图片进行绘图,对图片进行修饰和注释
在使用ImageDraw模块绘图时需要创建一个ImageDraw.Draw对象,且提供指向文件的参数,引用创建的Draw对象方法进行绘图,最后保存或输出绘制图像
        格式:对象名 = ImageDraw.Draw(参数)

功能函数:
     1.绘制直线
          格式:对象名.line([x1,y1,x2,y2],fill=None,width=0,joint=None)
             [x1,y1,x2,y2]表示以(x1,y1)为起点,(x2,y2)为终点画一条直线,[x1,y1,x2,y2]也可以写作[(x1,y1),(x2,y2)]
             fill用于设定指定的线条颜色
             width用于设置线条的宽度
             joint表示一系列线之间的联合类型,例如"曲线"
     2.绘制圆弧
          格式:对象名.arc([x1,y1,x2,y2],start,end,fill=None,width=0)
               [x1,y1,x2,y2]表示在左上角坐标(x1,y1),右下角坐标(x2,y2)的矩形区域内,完整的圆O类,以start为起始角度,
               end为终止角度,截取圆O的一部分圆弧并画出来,如果[x1,y1,x2,y2]区域不是正方形,则在该区域最大椭圆中根据角度调用圆弧
               fill,width于line()方法相同
     3.绘制椭圆
          格式:对象名.ellipse([x1,y1,x2,y2],fill=None,outline=None,width=0)
              用法同arc类似,用于画圆(或者椭圆),outline表示只规定圆的颜色
     4.绘制弦
          格式:对象名.chord([x1,y1,x2,y2],start,end,fill=None,outline=None,width=0)
          用法同arc类似,用于画圆从start到end的弦,fill表示弦于圆弧之间空间用指定颜色填满,设置为outline表示只规定弦线的颜色
     5.绘制扇形
          格式:对象名.pieslice([x1,y1,x2,y2],start,end,fill=None,outline=None,width=0)
          用法同ellipse类似,用于画起止角度间的扇形区域,fill表示将扇形区域用指定颜色填满,设置为outline表示只用指定颜色描出区域轮廓
     6.绘制多边形
          格式:对象名.polygon([x1,y1,x2,y2],fill=None,outline=None)
          根据坐标画多边形,Python会根据第一个参量中的(x,y)对,连接整个图形,fill表示将多边形区域用指定颜色填充填满,outline用于描出区域轮廓。
     7.绘制矩形
          格式:对象名.rectangle([x1,y1,x2,y2],fill=None,outline=None,width=0)
          在指定区域画一个矩形,(x1,y1)表示左上角的坐标,(x2,y2)表示矩形右下角的坐标,fill用于将矩形区域颜色填满,outline用于描出区域轮廓
     8.绘制文字
          格式:对象名.text(position,text,fill=None,font=None,anchor=None,spacing=0,align='left',direction=None,features=None,languag=None)
           在图像内添加文字,其中参数position是一个二元组,用于指定文字左上角的坐标
           text表示要写入的文字内容
           fill表示文本的颜色
           font必须为ImageFont中指定的font类型
           spacing表示行之间的像素数
           align表示位置left,center,right
           direction表i示文字的方向,它可以是rtl(从右到左)、ltr(从左到右)或者ttb(从上到下)
     9.绘制点
         格式:对象名.point(xy,fill=None)
         给定坐标处绘制点(单个像素)
"""
# 一、创建图片的方式绘制2D图像
# 1.导入Image,ImageDraw模块
from  PIL import Image,ImageDraw

# 2.创建一个图像,创建ImageDraw.Draw对象
img = Image.new('RGB',(100,100),'red')
imgdraw = ImageDraw.Draw(img)


# 绘制直线 line()
imgdraw.line((10,10,50,50),fill='white',width=2)
img.show()

#  绘制圆弧 arc()
imgdraw.arc([10,10,50,50],0,90,fill='white',width=2)
img.show()

# 绘制椭圆 ellipse()
imgdraw.ellipse([10,10,50,50],fill='white',outline='yellow',width=2)
img.show()

# 绘制弦 chord()
imgdraw.chord([10,10,50,50],0,90,fill='white',outline='yellow',width=2)
img.show()

# 绘制扇形 pieslice()
imgdraw.pieslice([10,10,50,50],0,90,fill='white',outline='yellow',width=2)
img.show()

# 绘制多边形 polygon()
imgdraw.polygon([10,50,60,30],fill='white',outline='yellow')
img.show()

# 绘制矩形 rectangle()
imgdraw.rectangle([10,10,50,50],fill='white',outline='yellow',width=2)
img.show()

# 绘制文字 text()
imgdraw.text((10,10),text='hello python',fill='white')
img.show()

# 绘制点 Point()
imgdraw.point([10,10],fill='white')
img.show()


# 在原有的图片进行绘图,对图片进行修饰和注释
# 1.导入Image,ImageDraw模块
from  PIL import Image,ImageDraw
# 2.导入一张图片
img = Image.open('clock.png')
# 3.创建绘图对象
imagdraw = ImageDraw.Draw(img)
imagdraw.rectangle([10,10,50,50],fill='red')
img.show()
img.save("new.jpg")  # 保存为新的图片

二、字体和字型处理(ImageFont模块)

"""
ImageFont:实现对字体和字型的处理

内置函数:
    1.load():从指定的文件加载一种字体,该函数返回对应的字体对象,如果失败,将产生IOError异常
          格式:ImageFont.load(文件名)
    2.load_path():和函数load_path()一样,但是如果没有指定当前路径,就会从文件sys.path开始查找指定文件
          格式:ImageFont.load_path(文件名)
    3.truetype():有两种定义格式,第1种格式的功能是加载一个TrueType或者OpenType字体文件,并且创建一个字体对象。
                 在Windows系统中,如果指定的文件不存在,加载器就会顺便看看Windows的字体目录下它是否存在。(C盘windows下fonts字体)
                     格式:ImageFont.truetype(file,size)  例如:file="C:\\Windows\\Fonts\\字体"
                 第二种格式的功能是加载一个TrueType或者OpenType字体文件,并且创建一个字体对象,通常编码方式为"unic"(Unicode)
                 "symb"(MicrosoftSymbol)、"ADDB"(Adobe Standard)、"ADBE"(Adobe Expert)和"armn"(Apple Roman)
                     格式:ImageFont.truetype(file,size,encoding=value)
    4.load_default():加载一种默认字体
          格式:ImageFont.load_default()
    5.getsize():返回文本的宽度和高度,返回值为一个二元组
          格式:ImageFont.getsize()
"""
# 1.导入Image,ImageDraw,ImageFont模块
from  PIL import Image,ImageDraw,ImageFont

# 2.创建一个图像,创建ImageDraw.Draw对象
img = Image.new('RGB',(100,100),'red')
imgdraw = ImageDraw.Draw(img)

# 3.加载一个字体文件
font = ImageFont.truetype('SIMLI.TTF',20)
imgdraw.text((10,10),text='hello python',fill='white',font=font)
img.show()
# 加载默认字体
font = ImageFont.load_default()
imgdraw.text((10,10),text='hello python',fill='white',font=font)
img.show()

三、绘制十字案例

"""
绘制十字

"""
# 1.导入Image,ImageDraw模块
from PIL import Image,ImageDraw
# 2.导入一张图片
img = Image.open('clock.png')
# 3.创建一个图像,创建ImageDraw.Draw对象
imgdraw = ImageDraw.Draw(img)
# 4.对图片进行画线
w,h = img.size
imgdraw.line((0,0,w,h),fill='green',width=3)
imgdraw.line((w,0,0,h),fill='green',width=3)
img.show

四、绘制验证码

"""
绘制验证码

"""
# 1.导入Image,ImageFilter,ImageDraw,ImageFont,random 模块
from PIL import Image,ImageFilter,ImageDraw,ImageFont
import random
# 2.创建一张图像
img = Image.new('RGB',(200,200),color='white')
imgdraw = ImageDraw.Draw(img)
# 获取颜色
def get_color():
    return (random.randint(200,255),random.randint(200,255),random.randint(200,255))
# 获取字母
def get_char():
    return chr(random.randint(65,90))

for x in range(200):
    for y in  range(200):
        imgdraw.point((x,y),fill=get_color())

font=ImageFont.truetype('simsun.ttc',35)
for i in range(4):
    imgdraw.text((10+i*20,50),get_char(),font=font,fill='red')

img.show()

你可能感兴趣的:(python,python)