博主:👍不许代码码上红
每日一诗句
🕊️
花开花落花翩翩,
定格美丽于照片。
照片张张各不同,
同张照片不同现。
欢迎:🐋点赞、收藏、关注、评论。

文章目录

  • 一、PIL介绍与安装(PyCharm)
  • 1.1、PIL简介
  • 1.2、Pillow安装(PyCharm)
  • 二、获取图片属性
  • 2.1、图片尺寸
  • 2.2、图片格式
  • 2.3、查看图片是否为只读
  • 2.4、查看图片信息
  • 2.5、图片模式
  • 三、图片的缩放
  • 3.1、改变尺寸
  • 3.2、局部放大
  • 3.3、批量修改
  • 四、图片的分离与合并
  • 4.1、split
  • 4.2、merge
  • 五、颜色处理
  • 5.1、getrgb()
  • 5.2、getcolor()
  • 六、添加水印
  • 6.1、ImageDraw
  • 6.2、ImageFont
  • 6.3、添加图片水印
  • 七、ndarray数组
  • 7.1、ndarray数组创建图像
  • 7.2、图像转化为ndarray数组
  • 八、Pillow生成GIF图
  • 一、PIL介绍与安装(PyCharm)

    1.1、PIL简介

    PIL全称 Python Imaging Library,是 Python 平台一个功能非常强大而且简单易用的图像处理库。随着python发展,出现兼容 Python 3 的版本,名字叫 Pillow,我们可以通过安装 Pillow 来使用 PIL。

    Pillow 库提供了非常丰富的功能,主要有以下几点:
    1、Pillow 库能够很轻松的读取和保存各种格式的图片
    2、Pillow 库提供了简洁易用的 API 接口,可以让您轻松地完成许多图像处理任务
    3、Pillow 库能够配合 GUI(图形用户界面) 软件包 Tkinter 一起使用
    4、Pillow 库中的 Image 对象能够与 NumPy ndarray 数组实现相互转换

    1.2、Pillow安装(PyCharm)

    ● 打开Settings

    找到Python Interpreter,点击+号搜索pillow


    选择第一个然后点击下面的安装

    二、获取图片属性

    2.1、图片尺寸

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    #打印image对象
    print(im)
    #查看尺寸
    print("宽是%s高是%s"%(im.width,im.height))
    #或者通过size查看
    print("图像的大小size:",im.size)
    

    2.2、图片格式

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    print("图像的格式:",im.format)
    

    2.3、查看图片是否为只读

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    print("图像是否为只读:",im.readonly)
    

    2.4、查看图片信息

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    # 包括了每英寸像素点大小和截图软件信息
    print("图像信息:",im.info)
    

    2.5、图片模式

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    print("图像模式信息:",im.mode)
    

    三、图片的缩放

    ● 在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。

    ● resize() 函数的语法格式如下:

    resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
    

    3.1、改变尺寸

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    try:
        #放大图片
        image=im.resize((550,260))
        #将新图像保存至桌面
        image.save("放大图像的孙悟空.png")
        print("查看新图像的尺寸",image.size)
    except IOError:
        print("放大图像失败")
    

    3.2、局部放大

    from PIL import Image
    im = Image.open("孙悟空.jpg")
    try:
        #选择放大的局部位置,并选择图片重采样方式
        # box四元组指的是像素坐标 (左,上,右,下)
        #(0,0,120,180),表示以原图的左上角为原点,选择宽和高分别是(120,180)的图像区域
        image=im.resize((550,260),resample=Image.LANCZOS,box=(0,0,120,180))
        image.show()
        #保存
        image.save("局部放大图像孙悟空.png")
        print("查看新图像的尺寸",image.size)
    except IOError:
        print("放大失败")
    

    3.3、批量修改

    # 批量修改图片尺寸
    import os
    from PIL import Image
    #读取图片目录
    fileName = os.listdir('./images')
    print(fileName)
    #设定尺寸
    width = 350
    height = 350
    # 如果目录不存在,则创建目录
    if not os.path.exists('./images2'):
        os.mkdir('./images2')
    # 循环读取每一张图片
    for img in fileName:
        old_pic = Image.open('./images/' + img)
        new_image = old_pic.resize((width, height),Image.BILINEAR)
        print (new_image)
        new_image.save('./images/'+img)
    

    四、图片的分离与合并

    ● Image 类提供了用于分离图像和合并图像的方法 split() 和 merge() 方法,通常情况下,这两个方法会一起使用。

    4.1、split

    from PIL import  Image
    
    im=Image.open("孙悟空.jpg")
    #修改图像大小,以适应图像处理
    image=im.resize((450,400))
    image.save("./images")
    #分离颜色通道,产生三个 Image对象
    r,g,b = image.split()
    r.show()
    g.show()
    b.show()
    

    4.2、merge

    from PIL import Image
    im = Image.open('孙悟空.jpg')
    r, g, b = im.split()
    om = Image.merge("RGB", (b, g, r))
    om.save('孙悟空BGR.jpg')
    

    五、颜色处理

    Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色。

    ImageColor 支持多种颜色模式的的命名(即使用固定的格式对颜值进行表示),比如我们熟知的 RGB 色彩模式,除此之外,还有 HSL (色调-饱和度-明度)、HSB (又称 HSV,色调-饱和度-亮度)色彩模式。
    ● 下面对 HSL 做简单介绍:
    H:即 Hue 色调,取值范围 0 -360,其中 0 表示“red”,120 表示 “green”,240 表示“blue”;
    S:即 Saturation 饱和度,代表色彩的纯度,取值 0~100%,其中 0 代表灰色(gry),100% 表示色光最饱和;
    L:即 Lightness 明度,取值为 0~100%,其中 0 表示“black”黑色,50% 表示正常颜色,100% 则表示白色。

    ImageColor 模块比较简单,只提供了两个常用方法,分别是 getrgb() 和 getcolor() 函数。

    5.1、getrgb()

    顾名思义,该函数用来得到颜色的 RGB 值,语法格式如下:

    PIL.ImageColor.getrgb(color)
    
    from PIL import Image,ImageColor
    # getrgb()方法
    color1=ImageColor.getrgb("blue")
    print(color1)
    color2=ImageColor.getrgb('#DCDCDC')
    print(color2)
    #使用HSL模式红色
    color3=ImageColor.getrgb('HSL(0,100%,50%)')
    print(color3)
    
    im= Image.new("RGB", (200, 200), ImageColor.getrgb("#EEB4B4"))
    im.save("新建图片.jpg")
    

    5.2、getcolor()

    ● 该方法与 getrgb() 类似,同样用来获取颜色值,不过它多了一个mode参数,因此该函数可以获取指定色彩模式的颜色值。语法格式如下:

    PIL.ImageColor.getcolor(color, mode)
    

    六、添加水印

    6.1、ImageDraw

    ● PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。
    ● 格式:

    draw = ImageDraw.Draw(im)
    draw.rectangle(xy, fill=None, outline=None)
    

    ● 说明:
    1、xy:元组参数值,以图像的左上角为坐标原点,表示矩形图的位置、图形大小的坐标序列,形如 ((x1,y1,x2,y2));
    2、fill:矩形图的背景填充色;
    3、outline:矩形图的边框线条颜色。

    from PIL import Image,ImageDraw
    #创建 Image 对象,当做背景图
    im = Image.new('RGB',(200,200),color='gray')
    #创建 ImageDraw 对象
    draw = ImageDraw.Draw(im)
    #以左上角为原点,绘制矩形。元组坐标序列表示矩形的位置、大小;fill设置填充色为红色,outline设置边框线为黑色
    draw.rectangle((50,100,100,150),fill=(255,0,0),outline=(0,0,0))
    #查看原图片
    im.show()
    #保存图片
    im.save("添加矩形图.png")
    

    6.2、ImageFont

    ● PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字,比如 TrueType 和 OpenType 类型的字体。
    ● 格式:

    font = ImageFont.truetype(font='字体文件路径', size=字体大小)
    d.text((x,y), "text", font, fill)
    

    1、(x,y):图像左上角为坐标原点,(x,y) 表示添加文本的起始坐标位置;
    2、text:字符串格式,要添加的文本内容;
    3、font:ImageFont 对象;
    4、fill:文本填充颜色。

    from PIL import Image,ImageFont,ImageDraw
    #打开图片,返回 Image对象
    im = Image.open("孙悟空.jpg")
    #创建画布对象
    draw = ImageDraw.Draw(im)
    #加载计算机本地字体文件
    font=ImageFont.truetype('C:/Windows/Fonts/msyh.ttc',size=36)
    #在原图像上添加文本
    draw.text(xy=(80,50),text='不许代码码上红',fill=(255,0,0),font=font)
    im.show()
    im.save("孙悟空222.jpg")
    

    6.3、添加图片水印

    # 打开logo文件
    from PIL import Image
    
    log_image = Image.open('example3.jpg')
    log_image_w, log_image_h = log_image.size
    
    # 打开目标文件
    ret_image = Image.open('孙悟空.jpg')
    ret_image_w, ret_image_h = ret_image.size
    
    # 粘贴:
    image_copy = ret_image.copy()
    image_copy.paste(log_image, (ret_image_w-log_image_w, ret_image_h-log_image_h))
    image_copy.save('孙悟空2log.jpg')
    
    

    七、ndarray数组

    ● ndarray 是 NumPy 中的数组类型,也称为 ndarray 数组,该数组可以与 Pillow 的 PIL.Image 对象实现相互转化。

    7.1、ndarray数组创建图像

    #导入相关的包
    from PIL import Image
    #使用numpy之前需要提前安装
    import numpy as np
    #创建 300*400的图像,3个颜色通道
    array = np.zeros([300,400,3],dtype=np.uint8)
    #rgb色彩模式
    array[:,:200]=[255,0,0]
    array[:,200:]=[255,255,0]
    img = Image.fromarray(array)
    img.show()
    img.save("数组生成图像.png")
    

    7.2、图像转化为ndarray数组

    from PIL import Image
    import numpy as np
    img = Image.open("孙悟空.jpg")
    img.show()
    #Image图像转换为ndarray数组
    img_2 = np.array(img)
    print(img_2)
    #ndarray转换为Image图像
    arr_img = Image.fromarray(img_2)
    #显示图片
    arr_img.show()
    #保存图片
    arr_img.save("arr孙悟空.jpg")
    

    八、Pillow生成GIF图

    ● GIF(Graphics Interchange Format,图形交换格式)是一种“位图”图像格式,它以.gif作为图像的扩展名。
    ● GIF 图片非常适合在互联网中使用,这是因为它采用了图像预压缩技术,该技术的应用,在一定程度上减少了图像传播、加载所消耗的时间。
    ● 与其他格式的图片相比,GIF 还有一项非常重要的应用,那就是生成动态图。我们知道,Pillow 能够处理多种图像格式,包括 GIF 格式,它可以将静态格式图片(png、jpg)合成为 GIF 动态图。

    import os
    import random
    from PIL import Image
    def png_to_gif(png_path,gif_name):
        """png合成gif图像"""
        frames = []
        # 返回文件夹内的所有静态图的列表
        png_files = os.listdir(png_path)
        # 打印返回的列表
        print(png_files)
        # 读取文件内的静态图
        for frame_id in range(1,len(png_files)+1):
            frame = Image.open(os.path.join(png_path,'image%d.png'%frame_id))
            frames.append(frame)
        # 以第一张图片作为开始,将后续5张图片合并成 gif 动态图
        # 参数说明:
        # save_all 保存图像;transparency 设置透明背景色;duration 单位毫秒,动画持续时间,
        # loop=0 无限循环;disposal=2 恢复原背景颜色。参数详细说明,请参阅官方文档,网址见文章末尾处。
        frames[0].save(gif_name,save_all=True,append_images=frames[1:],transparency=0,duration=2000,loop=0,disposal=2)
    #调用函数,传入对应的参数
    png_to_gif("./image",'t.gif')
    

    👍好了,今天的分享到这里,希望大家一起进步…

    来源:不许代码码上红

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】图片处理

    发表回复