PIL或Pillow学习2
接着学习下Pillow常用方法:
PIL_test1.py :
'''
9, Pillow图像降噪处理 由于成像设备、传输媒介等因素的影响,图像总会或多或少的存在一些不必要的干扰信息,我们将这些干扰信息统称为“噪声”,
比如数字图像中常见的“椒盐噪声”,指的是图像会随机出现的一些白、黑色的像素点。
图像噪声既影响了图像的质量,又妨碍人们的视觉观赏。因此,噪声处理是图像处理过程中必不可少的环节之一,
我们把处理图像噪声的过程称为“图像降噪”。 Pillow 通过 ImageFilter 类达到图像降噪的目的,该类中集成了不同种类的滤波器,
通过调用它们从而实现图像的平滑、锐化、边界增强等图像降噪操作。常见的降噪滤波器如下表所示: 图像降噪滤波器
名称 说明
ImageFilter.BLUR 模糊滤波,即均值滤波
ImageFilter.CONTOUR 轮廓滤波,寻找图像轮廓信息
ImageFilter.DETAIL 细节滤波,使得图像显示更加精细
ImageFilter.FIND_EDGES 寻找边界滤波(找寻图像的边界信息)
ImageFilter.EMBOSS 浮雕滤波,以浮雕图的形式显示图像
ImageFilter.EDGE_ENHANCE 边界增强滤波
ImageFilter.EDGE_ENHANCE_MORE 深度边缘增强滤波
ImageFilter.SMOOTH 平滑滤波
ImageFilter.SMOOTH_MORE 深度平滑滤波
ImageFilter.SHARPEN 锐化滤波
ImageFilter.GaussianBlur() 高斯模糊
ImageFilter.UnsharpMask() 反锐化掩码滤波
ImageFilter.Kernel() 卷积核滤波
ImageFilter.MinFilter(size) 最小值滤波器,从 size 参数指定的区域中选择最小像素值,然后将其存储至输出图像中。
ImageFilter.MedianFilter(size) 中值滤波器,从 size 参数指定的区域中选择中值像素值,然后将其存储至输出图像中。
ImageFilter.MaxFilter(size) 最大值滤波器
ImageFilter.ModeFilter() 模式滤波
'''
# 导入 ImageFilter类
from PIL import ImageFilter
# 1) 图像模糊处理
img_blur=img.filter(ImageFilter.BLUR)
#img_blur.show()
img_blur.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_BLUR.png")
print('保存模糊处理后的图像') # 2) 生成轮廓图
img_contour=img.filter(ImageFilter.CONTOUR)
#img_contour.show()
img_contour.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_CONTOUR.png")
print('保存生成轮廓图后的图像') # 3) 浮雕图
img_emboss=img.filter(ImageFilter.EMBOSS)
#img_emboss.show()
img_emboss.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_EMBOSS.png")
print('保存生成浮雕图后的图像') '''
10, Pillow图像颜色处理 Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,
比如 RGB 格式的颜色三元组、十六进制的颜色名称(#ff0000)以及颜色英文单词("red")。
同时,它还可以将 CSS(层叠样式表,用来修饰网页)风格的颜色转换为 RGB 格式。 注意,在 ImageColor 模块对颜色的大小并不敏感,比如 "Red" 也可以写为 " red"。 颜色命名
ImageColor 支持多种颜色模式的的命名(即使用固定的格式对颜值进行表示),比如我们熟知的 RGB 色彩模式,
除此之外,还有 HSL (色调-饱和度-明度)、HSB (又称 HSV,色调-饱和度-亮度)色彩模式。下面对 HSL 做简单介绍:
H:即 Hue 色调,取值范围 0 -360,其中 0 表示“red”,120 表示 “green”,240 表示“blue”;
S:即 Saturation 饱和度,代表色彩的纯度,取值 0~100%,其中 0 代表灰色(gry),100% 表示色光最饱和;
L:即 Lightness 明度,取值为 0~100%,其中 0 表示“black”黑色,50% 表示正常颜色,100% 则表示白色。 下面使用 HSL 色彩模式表示红色,格式如下:
HSL(0,100%,50%)
此时的颜色为“纯红色”,等同于 RGB (255,0,0)。 ImageColor 模块比较简单,只提供了两个常用方法,分别是 getrgb() 和 getcolor() 函数。 1) getrgb()方法
顾名思义,该函数用来得到颜色的 RGB 值,语法格式如下:
PIL.ImageColor.getrgb(color)
'''
from PIL import ImageColor
# getrgb()方法
color1=ImageColor.getrgb("AliceBlue")
print(color1)
color2=ImageColor.getrgb('#FFEBCD')
print(color2)
#使用HSL模式红色
color3=ImageColor.getrgb('HSL(0,90%,60%)')
print(color3) #使用new()绘制新的图像
img_new= Image.new("RGB", (100, 100), ImageColor.getrgb("#FFF0F5"))
#img_new.show()
img_new.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_ImageColor.jpg") '''
2) getcolor()
该方法与 getrgb() 类似,用来获取颜色值,不过它多了一个mode参数,因此该函数可以获取指定色彩模式的颜色值。
语法格式如下:
PIL.ImageColor.getcolor(color, mode) 参数说明如下:
color:一个颜色名称,字符串格式,可以是颜色的英文单词,或者十六进制颜色名。
如果是不支持的颜色,会报 ValueError 错误;
mode:指定色彩模式,如果是不支持的模式,会报 KeyError 错误。
'''
color4=ImageColor.getcolor('#FFE4E1','L')
print(color4)
color5=ImageColor.getcolor('Blue','RGBA')
print(color5) '''
11, Pillow为图片添加水印
为图片添加水印能够在一定程度上避免其他人滥用您的图片,这是保护图片版权的一种有效方式。 Pillow 库提供了添加水印的方法,操作简单,易学、易用。 我们知道,水印是附着在原图片上一段文字信息,因此添加水印的过程中会涉及两个问题:
第一、如何使文字信息附着在图片上;
第二、如何绘制文字信息。 Pillow 提供的ImageDraw和ImageFont模块成功解决了上述问题。 1) ImageDraw
PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,
或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。 draw = ImageDraw.Draw(img)
上述方法会返回一个 ImageDraw 对象,参数 img 表示 Image 对象。
这里我们可以把 Image 对象理解成画布,通过调用 ImageDraw 对象的一些方法,实现了在画布上绘制出新的图形目的。
ImageDraw 对象的常用方法如下表所示: 方法 说明
text 在图像上绘制文字
line 绘制直线、线段
eclipse 绘制椭圆形
rectangle 绘制矩形
polygon 绘制多边形 绘制矩形图的语法格式如下:
draw.rectangle(xy, fill=None, outline=None) 参数说明如下:
xy:元组参数值,以图像的左上角为坐标原点,表示矩形图的位置、图形大小的坐标序列,形如 ((x1,y1,x2,y2));
fill:矩形图的背景填充色;
outline:矩形图的边框线条颜色。
'''
from PIL import ImageDraw
#创建 Image 对象,当做背景图
img = Image.new('RGB',(200,200),color='GhostWhite')
#创建 ImageDraw 对象
draw = ImageDraw.Draw(img)
#以左上角为原点,绘制矩形。元组坐标序列表示矩形的位置、大小;fill设置填充色为红色,outline设置边框线为黑色
draw.rectangle((80,150,130,200),fill=(155,50,0,0),outline=(0,0,0,0))
#查看原图片
#img.show()
#保存图片
img.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_rectangle.jpg") '''
2) ImageFont
PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字,
比如 TrueType 和 OpenType 类型的字体。 创建字体对象的语法格式如下:
font = ImageFont.truetype(font='字体文件路径', size=字体大小)
如果想要在图片上添加文本,还需要使用 ImageDraw.text() 方法,语法格式如下:
d.text((x,y), "text", font, fill)
参数说明如下:
(x,y):图像左上角为坐标原点,(x,y) 表示添加文本的起始坐标位置;
text:字符串格式,要添加的文本内容;
font:ImageFont 对象;
fill:文本填充颜色。
'''
from PIL import ImageFont
#创建画布对象
draw = ImageDraw.Draw(img)
#加载计算机本地字体文件
font = ImageFont.truetype('C:/Windows/Fonts/Gabriola.ttf',size=48)
#在原图像上添加文本
draw.text(xy=(50,50),text='PandaCode',fill=(255,0,0),font=font)
#img.show()
img.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_ImageFont.jpg") '''
3) 添加图片水印
通过上述知识的学习,我们对ImageDraw和ImageFont模块有了大体的认识,并且也解决了如何给图片添加水印的两个关键问题。
'''
#字体
font=ImageFont.truetype('C:/Windows/Fonts/Gabriola.ttf',size=36)
#添加水印方法
def creating_watermark(img,text,font=font):
#给水印添加透明度,因此需要转换图片的格式
img_rgba=img.convert('RGBA')
img_text_canvas=Image.new('RGBA',img_rgba.size,(255,255,255,0))
print(img_rgba.size[0])
draw = ImageDraw.Draw(img_text_canvas)
#设置文本文字大小,并获取文字高宽值
text_x_width,text_y_height = draw.textsize(text,font=font)
print(text_x_width,text_y_height)
#计算文字图层在原图坐标值(x,y)
text_xy = (img_rgba.size[0] - text_x_width, img_rgba.size[1] - text_y_height)
print('text_xy : ', text_xy)
#设置文本颜色
draw.text(text_xy,text,font=font,fill=(255,0,0))
#将原图片与文字复合
img_text=Image.alpha_composite(img_rgba,img_text_canvas)
return img_text image = Image.open("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1.jpg")
#image.show()
image_water = creating_watermark(image,'PandaCode')
#image_water.show()
image_water.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_PandaCode.png") '''
12, Pillow和ndarray数组
NumPy 是 Python 科学计算的基础数据包,它被大量的应用于机器学习领域,比如图像识别、自然语言处理、数据挖掘等。
ndarray 是 NumPy 中的数组类型,也称为 ndarray 数组,该数组可以与 Pillow 的 PIL.Image 对象实现相互转化。
'''
#使用numpy之前需要提前安装
import numpy as np #1) ndarray 数组创建图像
#创建 300*300的图像,3个颜色通道
ndarray = np.zeros([300,300,3],dtype=np.uint8)
#rgb色彩模式
ndarray[:,:150]=[255,0,0]
ndarray[:,150:]=[255,255,0]
img_np = Image.fromarray(ndarray)
#img_np.show()
img_np.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_ndarray_img.png") #2) 图像转化为 ndarray 数组
# Image 图像转换为 ndarray 数组
img_ndarray = np.array(image)
print(img_ndarray)
# ndarray 转换为 Image 图像
ndarray_img = Image.fromarray(img_ndarray)
#显示图片
#ndarray_img.show()
#保存图片
ndarray_img.save("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_image_ndarray_img.png") '''
13, Pillow生成GIF动态图
GIF(Graphics Interchange Format,图形交换格式)是一种“位图”图像格式,它以.gif作为图像的扩展名。
GIF 图片非常适合在互联网中使用,这是因为它采用了图像预压缩技术,该技术的应用,
在一定程度上减少了图像传播、加载所消耗的时间。 与其他格式的图片相比,GIF 还有一项非常重要的应用,那就是生成动态图。
我们知道,Pillow 能够处理多种图像格式,包括 GIF 格式,它可以将静态格式图片(png、jpg)合成为 GIF 动态图。
注意:Pillow 总是以灰度模式(L)或调色板模式(P)来读取 GIF 文件。
'''
#根据文件夹里的png图片生成gif动态图方法
def png_to_gif(png_path,gif_name):
"""png合成gif图像"""
frames = []
# 返回文件夹内的所有静态图的列表
png_files = os.listdir(png_path)
# 打印返回的列表
print(png_files)
# 读取文件内的静态图
for pngf in png_files:
if 'png' in pngf:
frame = Image.open(os.path.join(png_path, pngf))
frames.append(frame)
# 以第一张图片作为开始,将后续n张图片合并成 gif 动态图
# 参数说明:
# save_all 保存图像;transparency 设置透明背景色;duration 单位毫秒,动画持续时间,
# loop=0 无限循环;disposal=2 恢复原背景颜色。参数详细说明,请参阅官方文档,网址见文章末尾处。
frames[0].save(gif_name,save_all=True,append_images=frames[1:],transparency=0,duration=1000,loop=0,disposal=2)
#调用函数,传入对应的参数
png_to_gif("C:/Users/86159/Desktop/py_workspace/myFlask/static/image","C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_PIL.gif")
image_gif = Image.open("C:/Users/86159/Desktop/py_workspace/myFlask/static/image/1_PIL.gif")
image_gif.show()




PIL或Pillow学习2的更多相关文章
- Python关于PIL库的学习总结与成果展示
一.关于PIL库的学习总结 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装.安装PIL库的方法如下,需要注意,安装库的名字是pillow. : ...
- PIL库 (Pillow)
PIL基础 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important ...
- 自定义的库加载不进来,因为库中import的PIL和pillow文件没有pip install
1.自定义的库,加载进来,提示red不能识别这个class或moudle 2.应该展开细节多看下,细节中提示,没有PIL和pillow 3.这个时候在cmd中使用pip安装PIL和pillow pip ...
- PIL、Pillow安装使用方法
PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存.图像显 ...
- Python PIL、Pillow笔记
原文链接:https://blog.csdn.net/FlashKoala/article/details/90649464 一.PIL.Pillow简介 PIL(Python Imaging Lib ...
- 转自 处理老版PIL 到 pillow
帮新同事部署开发环境, 由于项目代码里用到了PIL库处理图片, 导致一些图片在浏览器中无法正常显示. 几番折腾, 解决了问题, 这里记录一下报的问题, 及解决方法: 1. python版本不对, 6 ...
- [Python] 图像简单处理(PIL or Pillow)
前几天弄了下django的图片上传,上传之后还需要做些简单的处理,python中PIL模块就是专门用来做这个事情的. 于是照葫芦画瓢做了几个常用图片操作,在这里记录下,以便备用. 这里有个字体文件,大 ...
- PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)
Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库 (本blog部分图片及代码来自网络) 这是一个支持图像存储.显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的 ...
- py库: PIL 、pillow(图像处理)
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320027235877 ...
- PIL和Pillow
关于Pillow与PIL PIL(Python Imaging Library)是Python一个强大方便的图像处理库,名气也比较大.不过只支持到Python 2.7. PIL官方网站:http:// ...
随机推荐
- Sqlsugar 跨库查询小心得(同服务器不同数据库)
同一个服务器下的不同数据库,目前还没有进行跨服务器的查询,以后有待研究-- 1.使用的是Left Join左查询,因此连接字符串应该是写的第一个表所在的数据库的连接字符串 假设数据库A,B,连接字符串 ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.2版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- WPF webbowser 交互
// <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...
- 时间序列数据库TSDB InfluxDB介绍
背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工智能.物联网.机器学习.商业智能.智能预警啊等等. 以前的系统,做数据可视化,信息管理,流程控制.现在业务已经不仅仅满足于这 ...
- Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
大家好,我是编程乐趣. 我们都知道,要实现对结构化的数据(文本)搜索是比较容易的,但是对于非结构化的数据,比如图片,视频就没那么简单了. 但是现在有了AI模型,实现图片分类.搜索等功能,就变得容易很多 ...
- Django项目与Vue的集成
Django项目与Vue的集成 在现代Web开发领域,前后端分离已成为一种主流趋势.Django,作为一个强大的Python Web框架,以其丰富的功能和高度的可扩展性而受到开发者的青睐.而Vue.j ...
- 硬件设计:逻辑电平--差分信号(PECL、LVDS、CML)电平匹配
参考资料:逻辑电平设计规范 PECL电平匹配设计指南 CML信号与LVPECL信号的连接 硬件设计:逻辑电平--CML 硬件设计:逻辑电平--ECL/PECL/LVPECL 硬件设计:逻辑电平--LV ...
- q-analog 学习笔记(待整修)
联考题考这个不会就来学了 首先给出对其的定义. 对于一个对象 \(u\),构造关于 \(q\) 的某表达式 \(f(q)\),使得: \[\lim_{q\to 1}f(q)=u \] 然而这个可能没有 ...
- DeepSeek普照的阳光下,继续RAG还是Distillation?
什么是RAG RAG概述 RAG,全称为Retrieval-Augmented Generation(检索增强生成),是一种结合了信息检索和文本生成的人工智能技术.简单来说,RAG通过从大量文档或数据 ...
- Chatbox接入硅基流动deepseek R1模型API
Chatbox接入硅基流动deepseek R1模型API 注册硅基流动,填入邀请码会获得14元的免费额度 硅基流动最新邀请码:9MqV8tO4 注册硅基流动后 新建一个秘钥 回到模型广场,选择dee ...