ITPub博客

首页 > 数据库 > 数据库开发技术 > PIL库的简单操作

PIL库的简单操作

原创 数据库开发技术 作者:kanadeblisst 时间:2020-01-02 16:24:47 0 删除 编辑

灰度图和RGB图

灰度图是一个二维数组,每个值都表示这个像素点的灰度值(0到255之间的一个值),数组的维度(shape)则表示这个图片的长宽(单位像素px),先看个例子

  1. from PIL import Image

  2. import numpy as np


  3. data = np.ones((16, 16), dtype=np.uint8) # 创建一个全1的数组

  4. data = data * 255 # 数组所有元素乘以255

  5. print(data)

  6. data[4:12, 8] = 0 # 将中间的一些值置为0

  7. print(data)


  8. img = Image.fromarray(data, 'L') # 将一个二维数组转换成灰度图

  9. img.show() # 在屏幕显示图片

我们看一下显示的图片,会看到一个1。然后我们再去看data,你会发现也可以看到一个1。这是不是就很好理解了。

RGB图片是一个三维数组(长,宽,3),其实你完全可以把他看成一个和灰度图一样的二维数组,即维度为(长,宽)。这样每个元素的值就是一个一维数组,而这个一维数组是有三个元素组成的[R, G, B], 而将他转为灰度图也很简单,只需要将这个一维数组按照某种规则转换成一个0-255之间的值就行了,PIL中是这样转换的:L = R * 299/1000 + G * 587/1000+ B * 114/1000。

RGBA图片则是一个三维数组 (长,宽, 4),如果看成二维数组的话, 每个元素的是一个由四个元素组成的一维数组,即[R, G, B, A], A表示透明度。

PIL库

fromPILimportImage属性

  • Image.mode: 图片的格式,例如灰度'L', 彩色'RGB', 'RGBA'

  • Image.size: 图片的尺寸大小

  • Image.info: 图片的信息

方法

  • Image.open(path): 打开图片

  • Image.new(mode, size, color=0): 创建新图片,一般用不到

  • Image.fromarray(array, mode=None): 将numpy数组转换为图片,可以指定mode

  • Image.frombytes(mode, size, data, codername ='raw', **args):从字节流中读取图片,codername为解码器

  • Image.convert(mode=None, matrix=None, dither=None, palette=0, colors=256):将图片转换格式,例如由灰度转换为RGB convert('RGB')

  • Image.crop(box): 截取图片,box是一个(左,上,右,下)的元组,也就是相对于左上角(0,0)的像素值

  • Image.draft(mode, size):返回一个缩略图,格式为mode,大小为size。也就是说你可以将原来很大的图片缩小到你给定的size

  • Image.getbands(): RGB图返回('R', 'G', 'B'), 灰度图返回(L, ),知道是干什么了的吧

  • Image.getbbox(): 举个例子,一个512x512的图片会返回(0, 0, 512, 512),分别是(左,上,右,下)

  • Image.copy(): 复制图片

  • Image.getextrema(): 返回最大和最小的值(0-255), 如果是灰度图,则返回所有值的最大和最小值(min, max), 如果是RGB图则返回((Rmin, Rmax), (Gmin, Gmax), (Bmin, Bmax))

  • Image.getpixel((x, y)): 返回给定位置的像素值, 灰度图为单值,RGB图为一维数组

  • Image.paste(im, box=None, mask=None): 将一张图片粘贴在该图片,box是粘贴的位置,可以是(0, 0)的元组,即(左,上)开始, 也可以是(左,上,右,下),不给定默认为(0, 0)。mask不知道什么意思

  • Image.putpixel((x, y), value): 在指定位置修改像素值

  • Image.resize(size, resample=None): 重新调整图片大小,resample不知道什么意思

  • Image.rotate(angle, resample=None, expand=None):旋转图片,expand表示是否扩展图片以显示所有内容,默认不扩展,即旋转后的图片和原始图片大小一样

  • Image.save(fp, format=None):fp可以为文件名或文件对象,一般写文件名就行。format为保存的图片格式,默认根据文件名后缀选择

  • Image.show(): 在屏幕上显示该图片

  • Image.split():将图片分割,如果是RGB则分割成R,G,B三个图像

  • Image.thumbnail(size, resample=1):同Image.draft

  • Image.transpose(): 旋转90度,同Image.rotate(90)

  • Image.verify(): 判断图片是否损坏

  • Image.close(): 关闭文件指针,一般不需要

还有一些高级方法就不说了,那些基本用不上,想知道的直接看官方文档吧。


原文作者:Python成长路;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-05-15

  • 博文量
    117
  • 访问量
    67426