Pillow模块讲解一、Image模块1.1 、打开图片和显示图片就图片的处理最基础的操作就是打开这张图片,我们可以使用Image模块中的open(fp, mode)方法,来打开图片 。open方法接收两个参数,第一个是文件路径,第二个是模式 。主要的模式如下:
文章插图
光理论是不够的,在此送大家一套2020最新Python全栈项目视频教程,点击此处 进来获取 跟着练习下,希望大家一起进步哦!
更多的模式也就不说了,关于模式的模式的详细介绍我也不知道 。这个open方法返回一个Image就象,mode也不是必须参数 。打开图片代码如下:
from PIL import Image# 打开图片im = Image.open('test.jpg')# 显示图片im.show()1
当然显示图片不是我们的重点,我们获取Image对象之后,就可以获取它的一些信息了 。print('图像的格式:', im.format)print('图像的大小:', im.size)print('图像的宽度:', im.width)print('图像的高度:', im.height)# 传入坐标的元组print('获取某个像素点的颜色值:', im.getpixel(100, 100))1
在我的环境中运行结果如下:图像的格式: JPEG图像的大小: (3968, 2976)图像的宽度: 3968图像的高度: 2976获取某个像素点的颜色值: (198, 180, 132)1
1.2、创建一个简单的图像在Image模块中,提供了创建图像的方法 。主要是通过**Image.new(mode, size, color)**实现,该方法传入三个参数:mode:图像的创建模式
size:图像的大小
color:图像的颜色
用该方法可以创建一个简单的图像,之后我们可以通过save方法将图像保存:
from PIL import Image# 创建一个简单的图像im = Image.new('RGB', (100, 100), 'red')# 保存这个图像im.save('red.png')1
生成图片如下:文章插图
1.3、图像混合(1)透明度混合透明度混合主要是使用**Image中的blend(im1, im2, alpha)**方法,对该方法的解释如下:
im1:Image对象,在混合的过程中,透明度设置为(1-apha)
im2:Image对象,在混合的过程中,透明度设置为(apha)
alpha:透明度,取值是0-1 。当透明度为0时,显示im1对象;当透明度为1时,显示im2对象
注意:im1和im2的大小必须一样,且mode都为RGB
代码实现如下:
from PIL import Image# 打开im1im1 = Image.open('pic.jpg').convert(mode='RGB')# 创建一个和im1大小一样的图像im2 = Image.new('RGB', im1.size, 'red')# 混合图片,并显示Image.blend(im1, im2, 0.5).show()1
下面为原图和混合图的对比:文章插图
不得不说,我家艾斯真滴帅 。
(2)遮罩混合接下来就是很迷的时刻了,我们可以通过Image.composite(im1, im2, mask)方法实现遮罩混合 。三个参数都是Image对象,该方法的作用就是使用mask来混合im1和im2 。我是听不懂,你们能听懂最好给我讲一下 。具体实现如下:
# 这句代码写了好多遍,我真不想写了from PIL import Image# 打开图像1im1 = Image.open('pic1.jpg')# 打开图像2im2 = Image.open('pic2.jpg')# 重新设置im2的大小im2.resize(im1.size)# 将图像2的三个色道分离,其中r、g、b都为Image对象r, g, b = im2.split()# 遮罩混合Image.composite(im1, im2, b).show()12
注意:im1、im2和mask的大小必须一样im1、im2和遮罩混合效果对比如下:
文章插图
依旧是我帅气的艾斯 。
1.4、图像缩放(1)按像素缩放按像素缩放通过Image.eval(im1, fun)方法实现,其中im1为我们老生常谈的Image对象了;第二个为一个方法(函数),该函数传入一个参数,即像素点 。该函数会对图片中每个像素点进行函数内的操作 。下面我们就来简单使用一下这个方法:
from PIL import Image# 打开一张图像im = Image.open('抠鼻屎.jpg')# 对该图像每个像素点进行*2处理Image.eval(im, lambda x:x*2).show()1
这里我使用的lambda表达式,当然一般也都是用lambda表达式,不过你也可以像下面这样写:# 定义一个方法def func(x):return x*2# 对图像im每个像素点进行func中的操作,其中func不能加()Image.eval(im, func)1
效果图如下:文章插图
推荐阅读
- 茶的历史茶字起源,茶叶茶字的由来和历史演变的介绍
- linux下开发基于.net的三维绘图程序
- 春节关于茶的习俗,蒙舍蛮的品饮习俗
- Visual Studio代码扩展入门:用于C/C++静态分析的VS Code配置
- 茶叶水浇花好吗,茶叶渣的用途
- 附代码 什么是Python的迭代器和生成器?
- NLP中的文本分析和特征工程
- 山东取暖费发放标准是怎样的?
- 三大平原中面积最大的是什么?
- 《大王饶命》的吕小鱼结局是什么?