IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】图片处理 -> 正文阅读

[Python知识库]【Python】图片处理

在这里插入图片描述

博主:👍不许代码码上红
每日一诗句
🕊?
花开花落花翩翩,
定格美丽于照片。
照片张张各不同,
同张照片不同现。
欢迎:🐋点赞、收藏、关注、评论。

一、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  Image

im=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 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
#使用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')

👍好了,今天的分享到这里,希望大家一起进步…

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:00:11  更:2022-08-19 19:02:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 15:07:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计