zoukankan      html  css  js  c++  java
  • Python模块:PIL

    PIL:是Python Image Library的缩写,图像处理的模块。Image,ImageFont,ImageDraw,ImageFilter

    Image模块:

    常用方法:

    open()  #打开图片
    
    new(mode,size,color)   #创建一张空白图片
    
    save("test.gif","GIF")   #保存(新图片路径和名称,保存格式)
    
    size()   #获取图片大小
    
    thumbnail(weight,high)   #缩放图片大小(宽,高)
    
    show()    #显示图片
    
    blend(img1,img2,alpha)   #两张图片相加,alpha表示img1和img2的比例参数。
    
    crop()   #剪切,提取某个矩阵大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
    
    rotate(45)    #逆时针旋转45度
    
    transpose()    #旋转图像
        transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
        transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
        transpose(Image.ROTATE_90)             #旋转 90 度角。
        transpose(Image.ROTATE_180)            #旋转 180 度角。
        transpose(Image.ROTATE_270)            #旋转 270 度角。
    
    paste(im,box)#粘贴box大小的im到原先的图片对象中。
    
    convert()    #用来将图像转换为不同色彩模式。
    
    filters()     #滤镜
        BLUR   #虚化
        EMBOSS
    resize((128,128))     #resize成128*128像素大小
    
    convert("RGBA")    #图形类型转换
    
    getpixel((4,4))   #获取某个像素位置的值
    
    putpixel((4,4),(255,0,0))    #写入某个像素位置的值

    实例:

    import Image,ImageFilter
    
    im = Image.open("E:\QQ2.jpg")   #打开图片
    w,h = im.size   #获取图片的像素,其值为象素意义上的宽和高
    print(im.format)   #获取图片格式
    print(im.size)    #获取图片像素
    im.thumbnail((w//2,h//2))   #缩放图片大小为原来的一半
    im.save("E:\QQ_backup.jpg",'jpeg')    #保存图片,以及保存格式为jpeg
    #im.show()    #显示图片
    print(im.mode)    #显示模式。 RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
    box = (100,100,200,200)
    s = im.crop(box)   #图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
    #s.show()
    #s = s.transpose(Image.ROTATE_180)   #旋转180°
    #im.paste(s,box)   #粘贴
    #im.show()
    
    im = Image.open("E:\QQ2.jpg")
    im2 = im.filter(ImageFilter.EMBOSS)
    im2.save("E:\QQ_2.jpg",'jpeg')
    #im2.show()
    
    newImg = Image.new("RGBA",(640,480),(0,255,0))  #创建一张大小为640*480颜色为绿色的图片
    newImg.save("E:\newImg.png","PNG")

    输出结果为:

    JPEG
    (640, 640)
    RGB

    ImageFont模块:存储bitmap字体,用于ImageDraw类的text()方法。

    常用方法:

    load()    #从指定的文件中加载一种字体,该函数返回对应的字体对象。如果该函数失败,将产生IOError异常。
    
    load_path()   #和函数load()一样,但是如果没有指定当前路径的话,会从sys.path开始查找指定的字体文件。
    
    truetype("C:\Windows\Fonts\Arial.ttf", 18)   #加载字体对象,并且为指定字体的大小。
    
    load_default()   #加载一个默认字体
    
    getsize()   #返回给定文本的宽度和高度
    
    getmask()   #为给定的文本返回一个位图.如果字体使用了抗锯齿,位图的模式为“L”,且其最大值为255。否则,它的模式为“1”。

    ImageDraw模块:

     常用方法:

    (1)ImageDraw.Draw()   #对所有使用ImageDraw操作的图片,要进行对象的创建。
    
    import ImageDraw
    
    t = Image.new('RGB',(640,480),'blue')   #创建一张新图片
    d = ImageDraw.Draw(t)   #创建一个可操作对象
    (2)t.line([xi,yi,x2,y2],options)   #以x1,y1为起点,x2,y2为终点画一条直线,也可以写成(x1,y1,x2,y2)或[(x1,y1),(x2,y2)]。options选项包含的fill选项规定直线的颜色。
    
    import ImageDraw
    import Image
    
    t = Image.new('RGB',(700,700),'yellow')
    d = ImageDraw.Draw(t)  
    
    d.line([100,100,100,600],fill=10)
    d.line((100,100,600,100),fill='red')
    d.line((600,100,600,600),fill='black')
    d.line([(100,600),600,600],fill='blue')
    t.show()
    (3)d.arc([x1,y1,x2,y2],startAngle,endAngle,options)    #在左上角坐标为x1,y1,右下角坐标为x2,y2的矩形区域内满圆,以startAngle为起始角度,endAngle为终点角度,截取圆的一部分圆弧。如果x1,y1,xw,y2不是正方形,则在该区域内的最大椭圆中根据角度截取片段。
    
    d.arc((100,100,600,600),0,90,fill='red')   #画一个上半圆弧 
    d.arc((100,100,600,400),90,270,fill='blue')   #画一个右半椭圆
    (4)d.ellipse([x1,y1,x2,y2],options)   #用法同arc,用于画圆(或者椭圆)。Options选项中fill表示将圆(或者椭圆)用指定颜色填满,outlie表示只规定圆的颜色。
    
    d.ellipse((100,100,600,600),outline=128)  #画一个圆
    d.ellipse((100,250,600,450),fill='blue')   #在圆里画一个椭圆
    (5)d.chord([x1,y1,x2,y2],startAngle,endAngle,options)   #用法与arc相同,用来画圆从startAngle到endAngle的弦。Options选项中fill表示将弦与圆弧之间空间用指定颜色填满,outlie表示只规定弦线的颜色。
    
    d.ellipse((100,100,600,600),outline=128)   #画圆
    d.chord((100,100,600,600),0,90,outline='red')  #画一条弦
    d.chord((100,100,600,600),90,180,fill='red')  #画弦并且将弦与弧区域着色
    (6)d.pieslice([x1,y1,x2,y2],startAngle,endAngle,options)   #用法与ellipse相同,用于画起始角度间的扇形区域。options选项中fill选项将扇形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。
    
    d.ellipse((100,100,600,600),outline=128)   #画一个圆
    d.pieslice((100,100,600,600),180,210,outline=128)   #在圆内画180度到210度的扇形区域轮廓
    d.pieslice((100,100,600,600),60,90,fill='blue')   #画60度到90度的扇形区域
    (7)d.polygon([x1,y1,x2,y2...],options)   #根据坐标画多边形,Python会根据第一个参量中的xy坐标对,连接出整个图形。options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。
    
    d.polygon([(200,200),(600,300),(300,600)],outline = "red")
    d.polygon([(300,300),(500,300),(300,500),(500,500)],fill = "red")
    t.show()
    (8)d.rectangle([x1,y1,x2,y2],options)   #在给定区域内画一个矩形,(x1,y1)表示矩形左上角坐标值,(x2,y2)表示矩形右下角坐标值。options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓。
    
    d.rectangle((200,200,500,500),outline = "red")   #画矩阵
    d.rectangle((250,300,450,400),fill = 128)
    (9)d.text(position,  string,  options)   #Position是一个二元元组,指定字符串左上角坐标,string是要写入的字符串。options选项可以为fill或者font(只能选择其中之一作为第三参量,不能两个同同时存在,要改变字体颜色,见ImageFont模块中的NOTE)。其中fill指定字的颜色,font指定字体与字的尺寸,font必须为ImageFont中指定的font类型,具体用法见ImageFont.Truetype()。
    
    #在空白图像上矩形区域内添加文字
    text = "hello, python!"
    d.rectangle((200,200,500,500),outline = "red")  
    d.text((300,350),text,"red")

    实例1:

    import Image,ImageFont,ImageDraw
    
    image1 = Image.open("WALLPAPER.jpg")
    draw = ImageDraw.Draw(image1)
    
    ft = ImageFont.truetype("C:\WINDOWS\Fonts\STXINGKA.TTF",120)
    draw.rectangle((180,100,900,900),outline = "red")
    draw.text((200,400),"www.okorder.com",font=ft,fill="blue")
    image1.save("new_wallpaper.jpg","JPEG")

    实例2:生成验证码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import Image, ImageDraw, ImageFont, ImageFilter
    import random
    # 随机字母:
    def rndChar():
        return chr(random.randint(65, 90))
    # 随机颜色1:
    def rndColor():
        return (random.randint(64, 255), random.randint(64, 255),random.randint(64, 255))
    # 随机颜色2:
    def rndColor2():
        return (random.randint(32, 127), random.randint(32, 127),random.randint(32, 127))
    # 240 x 60:
    width = 60 * 4
    height = 60
    image = Image.new('RGB', (width, height), (255, 255, 255))
    # 创建Font对象:
    font = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 36)  #注意系统字体的路径
    # 创建Draw对象:
    draw = ImageDraw.Draw(image)
    # 填充每个像素:
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    # 输出文字:
    for t in range(4):
        draw.text((60 * t + 10, 10), rndChar(), font=font,
    fill=rndColor2())
    # 模糊:
    image = image.filter(ImageFilter.BLUR)
    im = image.save('code.jpg', 'jpeg')
    m = Image.open('code.jpg')
    m.show()

    输出结果为:

  • 相关阅读:
    使用U盘做最官方纯净的高压缩级别的w10系统,享受急速5秒开机
    Nginx设置浏览器缓存
    --with-http_sub_module模块
    --with-http_random_index_module模块
    --with-http_stub_status_module模块
    Nginx常见问题
    secure_link_module模块
    nginx编译安装新模块
    使用Ubuntu搭建Web服务器
    [BJDCTF 2nd]假猪套天下第一
  • 原文地址:https://www.cnblogs.com/ping-y/p/6212089.html
Copyright © 2011-2022 走看看