博主:👍不许代码码上红 每日一诗句: 🕊? 花开花落花翩翩, 定格美丽于照片。 照片张张各不同, 同张照片不同现。 欢迎:🐋点赞、收藏、关注、评论。
一、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")
print(im)
print("宽是%s高是%s"%(im.width,im.height))
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:
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 Image
im=Image.open("孙悟空.jpg")
image=im.resize((450,400))
image.save("./images")
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
color1=ImageColor.getrgb("blue")
print(color1)
color2=ImageColor.getrgb('#DCDCDC')
print(color2)
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
im = Image.new('RGB',(200,200),color='gray')
draw = ImageDraw.Draw(im)
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
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、添加图片水印
from PIL import Image
log_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
import numpy as np
array = np.zeros([300,400,3],dtype=np.uint8)
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()
img_2 = np.array(img)
print(img_2)
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)
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')
👍好了,今天的分享到这里,希望大家一起进步…
|