• 爬虫(十三):PIL模块


    1. PIL模块

    爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)中我留下了一个悬念,为什么安装的是pillow模块,而不是PIL模块。这是因为PIL是python2的产物,它并没有跟随python的发展而发展。所以有大佬为此特意写了一个针对python3的pillow模块。所以,如果需要安装python3对应的PIL,应该选择安装pillow。

    1.1 导入Image模块

    我们一般只使用PIL模块中的Image模块,所以我这就只讲解Image模块了。

    安装PIL模块:

    pip install pillow -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    导入模块:

    from PIL import Image

    1.2 Image模块常用方法

    (1) 读取图片

    open(url):读取一张图片,参数是图片名。

    (2) 显示图片

    show():显示一张图片。

    案例:

    from PIL import Image
    
    img = Image.open('xhh.jpg')
    img.show()

    结果:

    (3) 保存图片

    save(image,type):将图像保存为名称为“image”、格式为type格式的图片。

    (4) 创建新图片

    new(mode,size):创建一张模式为mode、大小为size的图片。

    new(mode,size,color):创建一张模式为mode、大小为size、颜色为color的图片。

    案例:

    from PIL import Image
    
    newImg = Image.new("RGBA",(640,480),(255,0,0))
    newImg.save("newImg.png","PNG")

    结果:

    (5) 两张图片相加

    blend(img1,img2,alpha):将img1和img2,这里alpha表示img1和img2的比例参数 

    (6) 改变图像大小

    resize(size):将图像修改为size大小

    案例1:

    from PIL import Image
    
    img1 = Image.open("xhh.jpg")
    img2 = Image.open("xhh2.jpg")
    #img = img1×0.8+img2×0.2
    img = Image.blend(img1,img2,0.2)
    img.show()

    结果:

    为什么会报错呢?因为他们的大小不一样,而这个报错在官方是没有解释的。

    案例2:

    from PIL import Image
    
    img1 = Image.open("xhh.jpg")
    img1 = img1.resize((256,256))
    img2 = Image.open("xhh2.jpg")
    img2 = img2.resize((256,256))
    #img = img1×0.7+img2×0.3
    img = Image.blend(img1,img2,0.3)
    img.show()

    结果:

    (7) 点操作 

    point(function):这个function接受一个参数,且对图片中的每一个点执行这个函数。

    案例:

    from PIL import Image
    
    img = Image.open("xhh.jpg")
    img.show()
    out=img.point(lambda i:i*1.5)#对每个点进行50%的加强
    out.show()

    这前后对比明显吧。 

    (8) 查看图像信息

    from PIL import Image
    
    img = Image.open("xhh.jpg")
    print(img.format)
    print(img.size)
    print(img.mode)

    结果:

    (9) 图片裁剪

    crop(box):设置要裁剪的区域范围box。

    案例:

    from PIL import Image
    
    img = Image.open("xhh.jpg")
    box=(100,100,500,500)
    #设置要裁剪的区域
    region=img.crop(box) #此时,region是一个新的图像对象。
    region.show()

    结果:

    (10) 图像黏贴(合并)

    paste(region,box):黏贴box大小的region图像到原来的图片对象中。

    案例:

    from PIL import Image
    
    img1 = Image.open("xhh.jpg")
    img2 = Image.open("xhh2.jpg")
    img1.paste(img2,(0,0))
    img1.show()

    结果:

    (11) 通道分离

    split():分割成三个通道,此时r,g,b分别为三个图像对象。

    (12) 通道合并

    merge("RGB",(b,g,r)):将b,r两个通道进行翻转。

    案例:

    from PIL import Image
    
    img1 = Image.open("xhh.jpg")
    img1.show()
    r, g, b = img1.split()
    img2 = Image.merge("RGB", (b, g, r))
    img2.show()

    结果:

    (13) 旋转图像

    rotate(angle):逆时针旋转angle度。 

    (14) 图像转换

    案例:

    from PIL import Image
    
    img = Image.open("xhh.jpg")
    #左右对换
    out1 = img.transpose(Image.FLIP_LEFT_RIGHT)
    out1.show()
    #上下对换
    out2 = img.transpose(Image.FLIP_TOP_BOTTOM)
    out2.show()

    结果:

    (15) 图像类型转换

    convert(mode):将图像转换成mode类型。

    PIL的九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

    常用的两种:

    1.模式”1”
    为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。下面我们将lena图像转换为“1”图像。
    from PIL importImage
    img = Image.open(“E:imagemyimg.jpg”)
    img_1=img.convert(“1”)
    2.模式“L”
    为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
    L = R * 299/1000 + G * 587/1000+ B * 114/1000

    (16) 获取某个像素位置的值

    getpixel(coordinate):coordinate为(x,y)形式的值。

    (17) 修改某个像素位置的值

    putpixel(coordinate,color):修改像素位置coordinate的颜色color的值。

    案例:

    from PIL import Image
    
    img = Image.open("xhh.jpg")
    
    print(img.size)
    print(img.getpixel((4, 4)))
    
    width = img.size[0]  # 长度
    height = img.size[1]  # 宽度
    
    for w in range(0, width):
        for h in range(0, height):
            data = img.getpixel((w, h))  # 得到像素值
            if (data[0] <= 170 and data[1] <= 170 and data[2] <= 170):
                img.putpixel((w, h), (0, 0, 255))  # 则这些像素点的颜色改成大红色
    
    img.show()

    结果:

  • 相关阅读:
    ShoreWall不错的Linux防火墙 规格严格
    数据挖掘 规格严格
    GLIBC 规格严格
    Solr/Lucene Wiki 规格严格
    Zope??? 规格严格
    用Apache htpasswd管理SVN帐户
    假装
    拼包函数及网络封包的异常处理(含代码)
    云计算
    云计算
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12099467.html
Copyright © 2020-2023  润新知