博主:👍不许代码码上红
每日一诗句:
🕊️
花开花落花翩翩,
定格美丽于照片。
照片张张各不同,
同张照片不同现。
欢迎:🐋点赞、收藏、关注、评论。
文章目录
- 一、PIL介绍与安装(PyCharm)
- 1.1、PIL简介
- 1.2、Pillow安装(PyCharm)
- 二、获取图片属性
- 2.1、图片尺寸
- 2.2、图片格式
- 2.3、查看图片是否为只读
- 2.4、查看图片信息
- 2.5、图片模式
- 三、图片的缩放
- 3.1、改变尺寸
- 3.2、局部放大
- 3.3、批量修改
- 四、图片的分离与合并
- 4.1、split
- 4.2、merge
- 五、颜色处理
- 5.1、getrgb()
- 5.2、getcolor()
- 六、添加水印
- 6.1、ImageDraw
- 6.2、ImageFont
- 6.3、添加图片水印
- 七、ndarray数组
- 7.1、ndarray数组创建图像
- 7.2、图像转化为ndarray数组
- 八、Pillow生成GIF图
一、PIL介绍与安装(PyCharm)
1.1、PIL简介
● PIL全称 Python Imaging Library,是 Python 平台一个功能非常强大而且简单易用的图像处理库。随着python发展,出现兼容 Python 3 的版本,名字叫 Pillow,我们可以通过安装 Pillow 来使用 PIL。
● Pillow 库提供了非常丰富的功能,主要有以下几点:
1、Pillow 库能够很轻松的读取和保存各种格式的图片
2、Pillow 库提供了简洁易用的 API 接口,可以让您轻松地完成许多图像处理任务
3、Pillow 库能够配合 GUI(图形用户界面) 软件包 Tkinter 一起使用
4、Pillow 库中的 Image 对象能够与 NumPy ndarray 数组实现相互转换
1.2、Pillow安装(PyCharm)
● 打开Settings
找到Python Interpreter,点击+号搜索pillow
选择第一个然后点击下面的安装
二、获取图片属性
2.1、图片尺寸
from PIL import Image
im = Image.open("孙悟空.jpg")
#打印image对象
print(im)
#查看尺寸
print("宽是%s高是%s"%(im.width,im.height))
#或者通过size查看
print("图像的大小size:",im.size)
2.2、图片格式
from PIL import Image
im = Image.open("孙悟空.jpg")
print("图像的格式:",im.format)
2.3、查看图片是否为只读
from PIL import Image
im = Image.open("孙悟空.jpg")
print("图像是否为只读:",im.readonly)
2.4、查看图片信息
from PIL import Image
im = Image.open("孙悟空.jpg")
# 包括了每英寸像素点大小和截图软件信息
print("图像信息:",im.info)
2.5、图片模式
from PIL import Image
im = Image.open("孙悟空.jpg")
print("图像模式信息:",im.mode)
三、图片的缩放
● 在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。
● resize() 函数的语法格式如下:
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
3.1、改变尺寸
from PIL import Image
im = Image.open("孙悟空.jpg")
try:#放大图片image=im.resize((550,260))#将新图像保存至桌面image.save("放大图像的孙悟空.png")print("查看新图像的尺寸",image.size)
except IOError:print("放大图像失败")
3.2、局部放大
from PIL import Image
im = Image.open("孙悟空.jpg")
try:#选择放大的局部位置,并选择图片重采样方式# box四元组指的是像素坐标 (左,上,右,下)#(0,0,120,180),表示以原图的左上角为原点,选择宽和高分别是(120,180)的图像区域image=im.resize((550,260),resample=Image.LANCZOS,box=(0,0,120,180))image.show()#保存image.save("局部放大图像孙悟空.png")print("查看新图像的尺寸",image.size)
except IOError:print("放大失败")
3.3、批量修改
# 批量修改图片尺寸
import os
from PIL import Image
#读取图片目录
fileName = os.listdir('./images')
print(fileName)
#设定尺寸
width = 350
height = 350
# 如果目录不存在,则创建目录
if not os.path.exists('./images2'):os.mkdir('./images2')
# 循环读取每一张图片
for img in fileName:old_pic = Image.open('./images/' + img)new_image = old_pic.resize((width, height),Image.BILINEAR)print (new_image)new_image.save('./images/'+img)
四、图片的分离与合并
● Image 类提供了用于分离图像和合并图像的方法 split() 和 merge() 方法,通常情况下,这两个方法会一起使用。
4.1、split
from PIL import Imageim=Image.open("孙悟空.jpg")
#修改图像大小,以适应图像处理
image=im.resize((450,400))
image.save("./images")
#分离颜色通道,产生三个 Image对象
r,g,b = image.split()
r.show()
g.show()
b.show()
4.2、merge
from PIL import Image
im = Image.open('孙悟空.jpg')
r, g, b = im.split()
om = Image.merge("RGB", (b, g, r))
om.save('孙悟空BGR.jpg')
五、颜色处理
● Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色。
● 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% 则表示白色。
ImageColor 模块比较简单,只提供了两个常用方法,分别是 getrgb() 和 getcolor() 函数。
5.1、getrgb()
顾名思义,该函数用来得到颜色的 RGB 值,语法格式如下:
PIL.ImageColor.getrgb(color)
from PIL import Image,ImageColor
# getrgb()方法
color1=ImageColor.getrgb("blue")
print(color1)
color2=ImageColor.getrgb('#DCDCDC')
print(color2)
#使用HSL模式红色
color3=ImageColor.getrgb('HSL(0,100%,50%)')
print(color3)
im= Image.new("RGB", (200, 200), ImageColor.getrgb("#EEB4B4"))
im.save("新建图片.jpg")
5.2、getcolor()
● 该方法与 getrgb() 类似,同样用来获取颜色值,不过它多了一个mode参数,因此该函数可以获取指定色彩模式的颜色值。语法格式如下:
PIL.ImageColor.getcolor(color, mode)
六、添加水印
6.1、ImageDraw
● PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。
● 格式:
draw = ImageDraw.Draw(im)
draw.rectangle(xy, fill=None, outline=None)
● 说明:
1、xy:元组参数值,以图像的左上角为坐标原点,表示矩形图的位置、图形大小的坐标序列,形如 ((x1,y1,x2,y2));
2、fill:矩形图的背景填充色;
3、outline:矩形图的边框线条颜色。
from PIL import Image,ImageDraw
#创建 Image 对象,当做背景图
im = Image.new('RGB',(200,200),color='gray')
#创建 ImageDraw 对象
draw = ImageDraw.Draw(im)
#以左上角为原点,绘制矩形。元组坐标序列表示矩形的位置、大小;fill设置填充色为红色,outline设置边框线为黑色
draw.rectangle((50,100,100,150),fill=(255,0,0),outline=(0,0,0))
#查看原图片
im.show()
#保存图片
im.save("添加矩形图.png")
6.2、ImageFont
● PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字,比如 TrueType 和 OpenType 类型的字体。
● 格式:
font = ImageFont.truetype(font='字体文件路径', size=字体大小)
d.text((x,y), "text", font, fill)
1、(x,y):图像左上角为坐标原点,(x,y) 表示添加文本的起始坐标位置;
2、text:字符串格式,要添加的文本内容;
3、font:ImageFont 对象;
4、fill:文本填充颜色。
from PIL import Image,ImageFont,ImageDraw
#打开图片,返回 Image对象
im = Image.open("孙悟空.jpg")
#创建画布对象
draw = ImageDraw.Draw(im)
#加载计算机本地字体文件
font=ImageFont.truetype('C:/Windows/Fonts/msyh.ttc',size=36)
#在原图像上添加文本
draw.text(xy=(80,50),text='不许代码码上红',fill=(255,0,0),font=font)
im.show()
im.save("孙悟空222.jpg")
6.3、添加图片水印
# 打开logo文件
from PIL import Imagelog_image = Image.open('example3.jpg')
log_image_w, log_image_h = log_image.size# 打开目标文件
ret_image = Image.open('孙悟空.jpg')
ret_image_w, ret_image_h = ret_image.size# 粘贴:
image_copy = ret_image.copy()
image_copy.paste(log_image, (ret_image_w-log_image_w, ret_image_h-log_image_h))
image_copy.save('孙悟空2log.jpg')
七、ndarray数组
● ndarray 是 NumPy 中的数组类型,也称为 ndarray 数组,该数组可以与 Pillow 的 PIL.Image 对象实现相互转化。
7.1、ndarray数组创建图像
#导入相关的包
from PIL import Image
#使用numpy之前需要提前安装
import numpy as np
#创建 300*400的图像,3个颜色通道
array = np.zeros([300,400,3],dtype=np.uint8)
#rgb色彩模式
array[:,:200]=[255,0,0]
array[:,200:]=[255,255,0]
img = Image.fromarray(array)
img.show()
img.save("数组生成图像.png")
7.2、图像转化为ndarray数组
from PIL import Image
import numpy as np
img = Image.open("孙悟空.jpg")
img.show()
#Image图像转换为ndarray数组
img_2 = np.array(img)
print(img_2)
#ndarray转换为Image图像
arr_img = Image.fromarray(img_2)
#显示图片
arr_img.show()
#保存图片
arr_img.save("arr孙悟空.jpg")
八、Pillow生成GIF图
● GIF(Graphics Interchange Format,图形交换格式)是一种“位图”图像格式,它以.gif作为图像的扩展名。
● GIF 图片非常适合在互联网中使用,这是因为它采用了图像预压缩技术,该技术的应用,在一定程度上减少了图像传播、加载所消耗的时间。
● 与其他格式的图片相比,GIF 还有一项非常重要的应用,那就是生成动态图。我们知道,Pillow 能够处理多种图像格式,包括 GIF 格式,它可以将静态格式图片(png、jpg)合成为 GIF 动态图。
import os
import random
from PIL import Image
def png_to_gif(png_path,gif_name):"""png合成gif图像"""frames = []# 返回文件夹内的所有静态图的列表png_files = os.listdir(png_path)# 打印返回的列表print(png_files)# 读取文件内的静态图for frame_id in range(1,len(png_files)+1):frame = Image.open(os.path.join(png_path,'image%d.png'%frame_id))frames.append(frame)# 以第一张图片作为开始,将后续5张图片合并成 gif 动态图# 参数说明:# save_all 保存图像;transparency 设置透明背景色;duration 单位毫秒,动画持续时间,# loop=0 无限循环;disposal=2 恢复原背景颜色。参数详细说明,请参阅官方文档,网址见文章末尾处。frames[0].save(gif_name,save_all=True,append_images=frames[1:],transparency=0,duration=2000,loop=0,disposal=2)
#调用函数,传入对应的参数
png_to_gif("./image",'t.gif')
👍好了,今天的分享到这里,希望大家一起进步…