Python: PIL.Image 基本使用

引入库

from PIL import Image

构造、打开图片

  • 方式一

    Image.open(fp, mode='r'):参数mode不是图片的mode,而是读写的方式,必须是‘r’。该函数只是打开图片,并不读入内存。读入内存时Image会调用Image.load()方法。

    # 从路径打开
    img = Image.open('01.jpg')
    
    ## 从文件流读取
    f = open('01.jpg', 'rb')
    img = Image.open(f) # 不要使用 f.close() 关闭文件,否则会报错, Image会自己调用关闭
    
    ### 从二进制流(BytesIO)读取
    import os
    with open('01.jpg', 'rb') as f:
    	img = Image.open(io.BytesIO(f.read()))
    
  • 方式二

    Image.fromarray(obj, mode=None):从数组打开图片,图片的模式mode未指定时根据数组来确定。

    # 从numpy数组中读取
    import numpy as np
    imgarray = np.zeros((200, 200), dtype='uint8') # dtype要指定,否则可能会与预想的结果不一致
    imgarray[:100, :100] = 0 # 左上块
    imgarray[:100, 100:] = 100 # 右上块
    imgarray[100:, 100:] = 150 # 右下块
    imgarray[100:, :100] = 200 # 左下块
    img = Image.fromarray(imgarray) # 生成一张灰度图片,具体图片可以看下面的图片
    
    ## 从opencv图片读取,其实等同与从numpy数组中读取,因为opencv图片保存在numpy数组内
    import cv2
    import numpy as np
    imgarray = cv2.imread('01.jpg', 0) # 以灰度的方式读取图片
    img = Image.fromarray(imgarray)
    
    ### 把Image图片转为数组,再打开,主要了解一下如何Image图片转为数组
    import numpy as np
    imgarray = np.array(Image.open('01.jpg'))
    img = Image.fromarray(imgarray)
    

    Python: PIL.Image 基本使用_第1张图片

  • 其他方式

    还有new、frombytes、fromstring、frombuffer等方法构建图片,我觉得不大可能用到就不看了…

保存图片

Image.save(fp, format=None, **params)

​ 如果format未指定,则根据fp保存的文件后缀确定保存的格式。params 根据保存格式不同有所不同,具体看官方文档:Pillow 格式支持

展示图片

Image.show(title=None, command=None)

​ 如果是masOS、Window系统,会生成一个临时BMP文件在系统临时文件夹内,同时调用系统BMP图查看器打开。如果是Unix平台,会生成临时PPM文件,并调用相应的查看软件。

Pillow 图片格式支持

  • 读写支持:

    BMP, GIF, ICO, JPEG, JPEG 2000, PNG, WebP等

  • 只读:

    BLP, CUR, DCX等

  • 只写:

    PDF等

  • 仅识别格式:

    BUFR, FITS, GRIB等

参考

官方文档:Pillow 格式支持

官方文档:Pillow 构建图片

如对以上内容有任何疑问、错误等欢迎指出,大家一起交流学习

你可能感兴趣的:(Python: PIL.Image 基本使用)