Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库

(本blog部分图片及代码来自网络)

这是一个支持图像存储、显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的缩放、裁剪、叠加以及图像添加条纹,文字等信息等的操作。

首先是利用pip下载一个:

它有许多子库,例如:Image、ImageChops、ImageDraw等等,他们各有神通,发挥着自己的作用,

首先我们当然学习的是经典的Image子库;

方法 描述
Image.open(filename) 根据参数加载图像文件
Image.new(mode,size,color) 根据给定参数创建一个新的图像
Image.open(StringIO.StringIO(buffer)) 从字符串中获取图像
Image.frombytes(mode,size,data) 根据像素点data创建图像
Image.verify() 对图像文件完整性进行检查,返回异常

参考:http://pillow-cn.readthedocs.io/zh_CN/latest/reference/index.html

首先对于使用的工具:基于WIN10,Python3.7.2,Pillow5.4.1

对于Image模块

首先我认识到一个简单的例子:读取下载好的图片并将它可视化(代码如下):

from PIL import Image
im = Image.open('test1.jpg') # 读取图片
im.show() # 可视化

 这里的“test.jpg”是我刚刚下载好的来自网络的图片放置在桌面上;

然后运行!

通过使用相关的图片查看器,我们就可以打开自己桌面上图片进行可视化了,我们甚至还可以用其他代码对图片进行调整:

from PIL import Image
im = Image.open('test1.jpg') # 读取图片
im.rotate(45).show() # 将图片旋转,并用系统自带的图片工具显示图片

诺!对比上图,我们的图片被旋转了45度,这些只是比较基本的操作,我们依然可以对图片进行更加多的改变!

图像灰度化处理

这是一张彩色的建筑图,我觉得太鲜艳了,又比较喜欢一种黑白色调显得低调深沉就像我一样,那么我可以使用下面的代码:

from PIL import Image
img = Image.open("test3.jpg")
# 灰度化:将RGB/RGBA -> L
img = img.convert("L")
img.show()

效果如下:

不得不说,很耐斯!

还有很多效果滴:

在Image.filter(filter)中:

# BLUR - 模糊处理
# CONTOUR - 轮廓处理
# DETAIL - 增强
# EDGE_ENHANCE - 将图像的边缘描绘得更清楚
# EDGE_ENHANCE_NORE - 程度比EDGE_ENHANCE更强
# EMBOSS - 产生浮雕效果
# SMOOTH - 效果与EDGE_ENHANCE相反,将轮廓柔和
# SMOOTH_MORE - 更柔和
# SHARPEN - 效果有点像DETAIL
再对“test3.jpg”进行处理:

from PIL import Image
from PIL import ImageFilter
testimg = Image.open("test3.jpg")
testimg.show()
filterimg = testimg.filter(ImageFilter.EMBOSS)
filterimg.show()

(浮雕效果)

(轮廓效果)

…………还有很多…………

and各种处理方案:

Image.getbands()

Image.geebbox()

Image.getcolors(maxcolor=256)

Image.getdata(band=None)(一般和list()结合使用)

Image.getextrema()

Image.getpixel((x,y))

Image.histogram(mask=None,extrema=None)
接下来是缩略图的学习,我们有时候为了节约储存空间,会将原来的图片进行压缩,通过等比例压缩之后会变成缩略图,那么如何用Image库来实现呢??

话不多说,先上代码!

from PIL import Image
im = Image.open('test3.jpg')
size = im.size
if size[0] > size[1]:
rate = float(200) / float(size[0])
else:
rate = float(128) / float(size[1])
new_size = (int(size[0] * rate), int(size[1] * rate))
new = im.resize(new_size, Image.BILINEAR)
new.save('n.jpg')
im.show('n.jpg')

想知道这是什么神仙代码吗?

看得出我还是使用了“test3.jpg”这张图,我想要将它压缩并另存为一个压缩后的图片存到桌面上,然后打开看看效果如何;

很明显桌面上多了一个新图片,这就是另存的压缩图了;

查看效果如上,这个图片显然比原图小了很多,拉近了看还是十分模糊的呢,这就是等比例缩小后的缩略图“n.jpg”啦~

接下来就是自制“美颜相机”啦~

我们的生活现在离不开手机,手机又刚好有自拍功能,这满足了我们没事“卡擦卡擦”拍照看看自己的盛世美颜的需求,但是也不是每一次拍照都能很好地满足我们的虚荣心和好胜的心理,毕竟……我们对自己可是很严格的!!!特别是颜值!!!

所以才会催生出各种P图软件,那么我们自己可不可以做呢??

当然~

代码呢?来人!上代码!!

from PIL import Image
from PIL import ImageEnhance
import cv2
import numpy as np # image = Image.open('test4.jpg')
#image.show()
def BrightnessEnhancement(brightness):
image = Image.open('test4.jpg')
enh_bri = ImageEnhance.Brightness(image)
# brightness =1.5
image_brightened = enh_bri.enhance(brightness)
image_brightened.show() def ContrastEnhancement(contrast):
image = Image.open('test4.jpg')
enh_con = ImageEnhance.Contrast(image)
# contrast =1.5
image_contrasted = enh_con.enhance(contrast)
image_contrasted.show() def ColorEnhancement(color):
image = Image.open('test4.jpg')
enh_col = ImageEnhance.Color(image)
# color =0.8
image_colored = enh_col.enhance(color)
image_colored.show() def SharpnessEnhancement(sharpness):
image = Image.open('test4.jpg')
enh_sha = ImageEnhance.Sharpness(image)
# sharpness = 2
image_sharped = enh_sha.enhance(sharpness)
image_sharped.show() def Filter(image):
image =cv2.imread('test4.jpg')
Remove=cv2.bilateralFilter(image,0,0,10)
cv2.imshow('filter',Remove)
cv2.waitKey(0)
cv2.destroyAllWindows()
# res = np.uint8(np.clip((1.2 * image + 10), 0, 255))
# tmp = np.hstack((dst, res))
# cv2.imshow('bai',res) def WhiteBeauty(image,whi):
image =cv2.imread('test4.jpg')
white = np.uint8(np.clip((whi * image + 50), 0, 255))
cv2.imshow('bai',white)
cv2.waitKey(0)
cv2.destroyAllWindows() if __name__ =="__main__":
filepath = 'test4.jpg'
#原始图像
brightness = 1.5
contrast = 0.2
color=1.9
sharpness=0.1
BrightnessEnhancement(brightness)
ContrastEnhancement(contrast)
ColorEnhancement(color)
SharpnessEnhancement(sharpness)
whi = 1.2
image =cv2.imread('test4.jpg')
Filter(image)
WhiteBeauty(image,whi)

这是原图:

 

这是美白后的:

 

灰度处理:

以及等等……(受限于篇幅不一一列举)

对一个GIF每一帧进行提取:

from PIL import Image
im = Image.open('gif2.gif') # 读入一个GIF文件
try:
im.save('aa{:02d}.png'.format(im.tell()))
while True:
im.seek(im.tell()+1)
im.save('new{:02d}.png'.format(im.tell()))
except:
print("处理结束")

 结果:

接下来就是激动人心的时刻了!我们要做动图!!

首先要下载一个第三方库——imageio

然后就可以上代码了:

import imageio

def create_gif(image_list, gif_name):

    frames = []
for image_name in image_list:
frames.append(imageio.imread(image_name))
# Save them as frames into a gif
imageio.mimsave(gif_name, frames, 'GIF', duration = 1) return def main():
image_list = ['t1.png','t2.png','t3.png','t4.png']
gif_name = 'finallgif.gif'
create_gif(image_list, gif_name) if __name__ == "__main__":
main()

效果:

由于有些分辨率的不统一所以会有黄边,不要在意呀~

PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)的更多相关文章

  1. Python关于PIL库的学习总结与成果展示

    一.关于PIL库的学习总结 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装.安装PIL库的方法如下,需要注意,安装库的名字是pillow. : ...

  2. PIL库的学习总结及生成GIF

    一.PIL库的概述 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装. 打开cmd,输入 pip install pillow PIL库支持图像 ...

  3. PIL库学习及运用

    了解PIL以及安装. 个方面的功能: (1) 图像归档:对图像进行批处理.生产图像预览.图像格式转换等. (2) 图像处理:图像基本处理.像素处理.颜色处理等. 安装PIL在cmd中输入 pip in ...

  4. 运用PIL库 用来美白,磨皮,瘦脸等操作!

    1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow  即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...

  5. Python PIL库学习笔记

    1.PIL简介 Python Imaging Library(缩写为PIL)(在新的版本中被称为Pillow)是Python编程语言的开源库,它增加了对打开,操作和保存许多不同图像文件格式的支持.它适 ...

  6. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  7. PIL库的运用

    PIL库学习及运用 1.库的介绍Python Imaging Library,简称PIL python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 下面是我的学习笔记 首 ...

  8. python,使用PIL库对图片进行操作

    在做识别验证码时,需要对验证码图片进行一些处理,所以就学习了一下PIL的知识,下面是我总结的一些常用方法. 注明:图片的操作都需要Image库,所以要使用import Image导入库 1.打开图片 ...

  9. [转]Python 之 使用 PIL 库做图像处理

    Python 之 使用 PIL 库做图像处理 1. 简介. 图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging ...

随机推荐

  1. Resharper使用详解(转)

    万恶的360文档 解除复制的限制 Ctrl + Shift + i 打开控制台,也可以鼠标右键,选最后一个检查也可以打开控制台,输入: setInterval = null; //将内置无限循环函数设 ...

  2. 初识C语言 (四)

    分支结构 if语句 C语言中的分支结构语句中的if条件语句,简单if语句的基本结构如下: 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句. 其过程可表示为下图 实例: if(resu ...

  3. 【Git】git rebase报错new blank line at EOF.处理

    执行git rebase报错如下: First, rewinding head to replay your work on top of it... Applying: 本次提交信息 .git/re ...

  4. OpenStack--Rabbitmq组件消息队列

    概念 队列 MQ 全称为Message Queue,消息队列( MQ ) 是一种应用程序的通信方法.应用程序通过读写入列队的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传递指的是 ...

  5. Hadoop第一式:配置Linux环境之免密配置及SSH原理

    一.配置SSH免密登录 进入/.ssh目录,执行密钥生成指令 ssh-keygen -t rsa (rsa为默认加密格式) 然后会出现四个提示,让你选择密钥保存路径.指纹.拍照啥的,不用管它直接回车过 ...

  6. 测开之路十:函数&参数

    def 函数名(): 函数代码块 return 返回值 参数 必备参数:位置参数,调用函数时必须有值传入 默认参数,调用如果没有传值使用默认值 不定长参数 *args:想传多少传多少,必须放在位置参数 ...

  7. 获取Ajax通信对象方法

    function getXHR() { // 该方法用于获取Ajax通信对象 var xhr = null; if (window.XMLHttpRequest != null && ...

  8. .NET英文技术文章导读(2017-02-09)

    关键字:Docker..NET Core.Apache.ASP.NET Core.Logic App.C#7..NET Standard   使用Docker和.NET Core构建DockNetFi ...

  9. lxml库

    lxml库 lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML数据. 基本使用: 1.我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码 ...

  10. Tomcat7配置Https

    使用的是UCloud的免费证书: 教程: https://docs.ucloud.cn/security/ussl/index 购买证书的地址: https://console.ucloud.cn/u ...