【Python】图片处理

news/2024/11/7 7:34:58/

在这里插入图片描述

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

文章目录

    • 一、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')

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


http://www.ppmy.cn/news/885878.html

相关文章

小s探秘之HTTP和HTTPS

一、HTTP 1、简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。 HTTP是一个基于TCP/IP通信协议来传递数据(HTM…

最小SNAP轨迹生成

最小SNAP轨迹生成 说明: snap对应的是推力的倒数,snap最小化使得推力变化速度最小化,来节省能量。 jerk对应的是推力、角速度,jerk最小化使得角速度最小,可以使得视觉方向的处理方便(图形畸变更小&#…

大S,小S

今天看了《未来警察》,第一次看大S演的电影,她的表演很有趣。我会继续关注。樊少皇似乎就是要坚持走反派流氓路线了。 看了小沈阳作客《康熙来了》那期,发现欧弟的文化修养还不错,一些内地的特有文化,小沈阳因为受教育…

【webpack】webpack初步了解(存档自用)

2023/7/14 09:26:28 webpack工程化构建 2023/7/14 09:26:50 Webpack是一个现代化的前端工程化构建工具,它可以将多个模块打包成一个或多个静态资源文件。使用Webpack,你可以通过配置定义各种模块之间的依赖关系、加载器和插件。 以下是使用Webpack进…

node selector

k8s节点有4种调度方式: 1、nodeSelector 是节点选择约束的最简单的方式,通过添加nodeSelector 字段添加到 Pod 的规约中设置你希望的目标节点所具有的标签, kubectl apply -f pod22.yaml kubectl describe pod nginx-kusc00401 发现pod 创建…

苹果笔记本键盘打不了字的问题如何解决

在使用苹果笔记本工作和学习的过程中,我们是需要用到键盘来输入文字的,那如果遇到了键盘打不了字的情况,我们该怎么来解决呢?有些用户可能不是很清楚,所以今天本文为大家整理的就是关于苹果笔记本键盘打不了字的详细解…

Socket API使用——模拟http协议

Socket API使用——模拟http协议 简单的c/s程序——服务端实例 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.nio.char…

win10语言不能安装计算机,重装win10打不了字?用这招,一下子就搞定

原标题:重装win10打不了字?用这招,一下子就搞定 最近有网友咨询小编有关win10不能打字的问题。有位小伙伴在安装了win10系统之后,使用不了中文汉字。还有一位小伙伴在重装系统过程中,输入不了字。根据这两种情况&#…