美文网首页
Python用Pillow(PIL)进行简单的图像操作

Python用Pillow(PIL)进行简单的图像操作

作者: 我的昵称是零呀 | 来源:发表于2017-11-04 16:07 被阅读0次

    安装

    pip install pillow
    

    Image类

    可以说是(PIL:Python Image Library)里最重要的一个类了,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
    使用open()函数可以从文件加载图像
    例如:

    图片1.png
    from PIL import Image
    img = Image.open("C:/Users/15338/Pictures/Saved Pictures/dog.jpg")
    print(img.format, img.size[0], img.size, img.mode)
    
    
    JPEG 353 (353, 409) RGB
    

    format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度,“RGB” 表示真彩色图像。

    图片的坐标表示

    图像中左上角是坐标原点(0, 0),这和平常数学里的坐标系不太一样。这样定义的坐标系意味着,X轴是从左到右增长的,而Y轴是从上到下增长。

    在Pillow中如何使用上述定义的坐标系表示一块矩形区域?许多函数或方法要求提供一个矩形元组参数。元组参数包含四个值,分别代表矩形四条边的距离X轴或者Y轴的距离。顺序是(左,顶,右,底)。右和底坐标稍微特殊,表示直到但不包括。可以理解为[左, 右)和[顶, 底)这样左闭右开的区间。比如(3, 2, 8, 9)就表示了横坐标范围[3, 7);纵坐标范围[2, 8)的矩形区域。

    图片处理

    图片裁剪

    cropedImg = img.crop((100, 0, 300, 200))
    cropedImg.save(r'C:/Users/15338/Pictures/Saved Pictures/cropdog.jpg')
    cropedImg.show()
    
    图片2.png
    show()方法会调用系统默认图像查看软件,打开并显示。save()可保存处理后的图片,如果未经处理,保存后的图像占用的空间(字节数)一般也与原图像不一样,可能经过了压缩。

    粘贴

    img.paste(cropedImg, (0, 0))
    img.show()
    
    图片3.png

    这如果之后还会用到原图的信息,由于信息被改变就很麻烦。所以paste前最好使用copy()复制一个副本,在此副本操作,不会影响到原图信息。

    几何变换

    img.rotate(90).save('C:/Users/15338/Pictures/Saved Pictures/rotate90.jpg')
    

    逆时针旋转

    图片4.png
    img.transpose(Image.FLIP_LEFT_RIGHT).save(r'C:/Users/15338/Pictures/Saved Pictures/transepose_lr.jpg')
    img.transpose(Image.FLIP_TOP_BOTTOM).save(r'C:/Users/15338/Pictures/Saved Pictures/transepose_tb.jpg')
    

    图像的镜面翻转。transpose()函数可以实现,必须传入Image.FLIP_LEFT_RIGHT或者Image.FLIP_TOP_BOTTOM,第一个是水平翻转,第二个是垂直翻转。

    图片5.png

    颜色空间变换

    convert()函数

    gray = img.convert("L")
    gray.show()
    
    图片6.png

    其他模块

    Pillow使用ImageFilter可以简单做到图像的模糊、边缘增强、锐利、平滑等常见操作。(具体见百度)

    ImageDraw,ImageFont

    from PIL import Image, ImageDraw, ImageFont
    
    img = Image.open(r'C:\Users\15338\Pictures\Saved Pictures\dog.jpg')
    draw = ImageDraw.Draw(img)
    text = 'HelloWorld'  
    Font = ImageFont.truetype("C:\Windows\Fonts\SHOWG.TTF",48)
    draw.text([5,30],text,"red", font=Font)
    img.save(r'C:\Users\15338\Pictures\Saved Pictures\dog.jpg')
    
    
    图片7.png

    生成随机字母验证码

    from PIL 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\SHOWG.TTF', 36)
    # 创建Draw对象:
    draw = ImageDraw.Draw(image)
    # 填充每个像素:
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    char = []
    # 输出文字:
    for t in range(4):
        ch = rndChar()
        char.append(ch)
        draw.text((60 * t + 10, 10), ch, font=font, fill=rndColor2())
    # 模糊:
    image = image.filter(ImageFilter.BLUR)
    image.save('D:\code.jpg', 'jpeg');
    print(char)
    
    
    ================= RESTART: C:\Users\15338\Desktop\pillow.py =================
    ['C', 'M', 'N', 'T']
    >>>
    
    图片8.png

    参考:
    http://www.cnblogs.com/sun-haiyu/p/7127582.html
    http://python.jobbole.com/83685/
    http://blog.csdn.net/dou_co/article/details/17618319
    http://effbot.org/imagingbook/
    https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000

    相关文章

      网友评论

          本文标题:Python用Pillow(PIL)进行简单的图像操作

          本文链接:https://www.haomeiwen.com/subject/tcbfmxtx.html