目录
打开和新建图像文件
打开图像
新建图像
混合
透明度混合
遮罩混合
复制和缩放
复制图像
縮放像素(按像素缩放)
缩放图像(按尺寸大小缩放)
粘贴和裁剪
裁剪
粘贴
图像旋转
格式转换
covert()
transpose()
分离和合并
Image库其他内置函数
通过使用Image模块,可以从文件中加载图像,或者处理其他图像,或者从scratch中创建图像。在对图像进行处理时,首先需要打开要处理的图片。在Image模块中使用函数open()打开一副图片,执行后返回Image类的实例。当文件不存在时,会引发IOError错误。
打开图像使用函数open()语法格式:open(fp,mode)
- fp:打开文件的路径
- mode:可选参数,表示打开文件的方式,通常使用默认值r
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 img1.show() # 显示图片 print('图片格式:', img1.format) print('图片大小:', img1.size) print('图片宽度:', img1.width) print('图片高度:', img1.height) print('获取指定位置的像素:', img1.getpixel((200, 260))) # 参数为坐标点的元组,返回结果为一个RGB值元组
new(mode,size,color =0)
- mode:图片模式
- size:图片尺寸,使用宽和高两个元素构成的元组
- color:默认颜色(黑色)
img2 = Image.new(mode='RGB', size=(img1.size), color='yellow') # 创建一个与img1同样大小的图片
使用函数blend()实现透明度混合处理。语法格式:blend(im1,im2,alpha)
- im1、im2:参与混合的图片1和图片2
- alpha:混合透明度,取值是0-1
通过使用函数blend()可以将im1和im2这两幅图片(尺寸相同)以一定的透明度进行混合。具体混合过程:(im1*(1-alpha)+ im2*alpha)。当混合透明度为0时,显示im1原图。当混合透明度alpha取值为1时,显示im2 原图片。
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 img2 = Image.new(mode='RGB', size=(img1.size), color='yellow') # 创建一个与img1同样大小的图片 Image.blend(img1, img2, .3).show() # 透明度混合处理
使用函数composite()实现遮罩混合处理。语法格式:composite(im1,im2,mask)
- iml、im2:混合处理的图片1和图片2
- mask:也是一个图像
- mode:可以为“1”,“L"或“RGBA”,并且大小要和im1、im2一样
函数composite()的功能是使用mask来混合图片im1和im2,并且要求mask、im1和im2三幅图片的尺寸相同。
from PIL import Image im1 = Image.open('./poo/1.jpg') im2 = Image.open('./poo/2.jpg') im2.resize(im1.size) # 将im2的图片大小修改成与im1相同 r, g, b = im2.split() # 将im2的图片rgb通道切割 Image.composite(im1, im2, g).show() # 用im2中的g通道对im1进行遮罩
使用函数Image.copy()复制指定的图片,可以用于在处理或粘贴时需要持有源图片
使用函数eval()实现像素缩放处理,能够使用函数fun()计算输入图片的每个像素并返回。使用函数eval()语法格式:eval(image,fun)。其中image表示输入的图片,fun()表示给输入图片的每个像素应用此函数,fun()函数只允许接收一个整型参数。如果一个图片含有多个通道,则每个通道都会应用这个函数。
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 Image.eval(img1, lambda i: i * 0.5).show() # 按照像素缩放,可以达到增加或减少曝光的效果
使用函数thumbnail()原生地缩放指定的图像,语法格式:Image.thumbnalsizeresample-3)
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 img1.thumbnail(size=(500, 300)) # 按照尺寸大小缩放 img1.show()
使用函数crop()可以剪切图片中box所指定的区域, 语法:img.crop(box = None)
参数box是一个四个值得元组,分别定义了剪切区域的左、上、右下4个坐标。
im1 = Image.open('./poo/5.jpg') im_crop = im1.crop((50, 50, 500, 300)) # 裁剪 im_crop.show()
使用函数paste()可以粘贴源图像或像素至该图像中。
语法格式:Image.paste(im,box=Nonemask=None),其中im是源图或像素值; box 是粘贴的区域; mask 是遮罩。参数box可以分为以下3中情况。
1. (x1y1) :将源图像左上角对齐(x1,y1)点,其余超出被粘贴图像的区域被抛弃。
2. (x1,y1,x2,y2) :源图像与此区域必须一致。
3.None:源图像与被粘贴的图像大小必须一致。
im1 = Image.open('./poo/5.jpg') im2 = Image.open('./poo/6.jpg') im_crop = im1.crop((50, 50, 500, 300)) # 裁剪 im2.paste(im_crop, (10, 20)) # 图片黏贴 im2.show()
使用函数rotate()可以返回此图像的副本,围绕其中心逆时针旋转给定的度数Image.rotate()
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 img1.rotate(90).show() # 图片的旋转
使用函数convert()返回模式转换后的图像实例。
convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256)
- mode:转换文件的模式,模式有“L”、“RGB”“CMYK”;
- matrix:旋转使用的矩阵;
- dither:取值为None切转为黑白图时非0 (1-255)像素均为白,也可以设置此参数为FLOYDSTEINBERG。
from PIL import Image img1 = Image.open('./poo/1.jpg') img1.convert('L').show()
函数transpose()实现图像格式的转换。Image. transpose(method)
转换图像后,返回转换后的图像,“method” 的取值有以下几个。
- PIL.Image.FLIP_LEFT_RIGHT:左右镜像
- PIL.Image.FLIP_TOP_BOTTOM :上下镜像
- PIL.Image.ROTATE_90:旋转90
- PlL.Image.ROTATE_180: 旋转180
- PIL.Image.ROTATE_270: 旋转270
- PIL.Image.TRANSPOSE :颠倒顺序
from PIL import Image img1 = Image.open('./poo/1.jpg') # 打开图片 img1.transpose(Image.FLIP_LEFT_RIGHT).show() # 左右镜像 img1.transpose(Image.FLIP_TOP_BOTTOM).show() # 上下镜像 img1.transpose(Image.ROTATE_90).show() # 旋转90度
分离:使用函数split()可以将图片分割为多个通道列表。
合并:使用函数merge()可以将一个通道的图像合并到更多通道图像中。语法格式如下所示:
Image.merge(mode,bands),其中mode指输出图像的模式,bands波段通道,一个序列包含单个带图通道。
from PIL import Image img1 = Image.open('./poo/1.jpg') img2 = Image.open('./poo/2.jpg') img2 = img2.resize(img1.size) r1, g1, b1 = img1.split() r2, g2, b2 = img2.split() img = Image.merge('RGB',(r2,g1,b2)) img.show()
常用的属性
- Imageformat: 源图像格式
- Image.mode:图像模式字符串
- Image.size:图像尺寸
常用的内置函数
- Image.getbands(): 获取图像每个通道的名称列表,例如RGB图像返回['R'G';B']。
- Image.getextrema():获取图像最大、最小像素的值。
- Image.getpixel(xy):获取像素 点值。
- Image.histogram(mask=None,extrema=None):获取图像直方图,返回像素计数的列表。
- Image.point(function):使用函數修改图像的每个像素。
- Image.putalpha(alpha):添加或替换图像的alpha层。
- Image.save(fp,format=None,**params):保存图片。
- Image.show(title=None,command=None): 显示图片。
- Image.transform(size ,method,data=None,resample=0.fill= 1):变换图像。
- Image.verify():校验文件是否损坏。
- Image.close():关闭文件。