ISEE小语
不要去想什么憋不出来的大意义,就从你感到有意思的事开始做起。能看到诗和远方固然好,如果看不到,实践一下你关心的小目标也挺好。
出自:古典|《拆掉思维里的墙》
回顾上篇
Pandas数据分析,生成10种必备的可视化分析图,详细独立版
ISEE小栈,公众号:ISEE小栈Pandas数据分析,生成10种必备的可视化分析图,详细独立版
开始本篇
Pillow是一个强大的图像处理库,它是Python Imaging Library(PIL)的一个分支,提供了丰富的图像处理功能和易于使用的接口。以下是一些主要功能和特点:
1. 图像打开和保存:Pillow 可以方便地打开各种格式的图像文件(如 JPEG、PNG、BMP、GIF、TIFF 等),并支持将图像保存为不同的文件格式。
2. 图像尺寸调整和缩放:可以使用 Pillow 轻松调整图像的大小和缩放。你可以指定固定的尺寸或按比例进行缩放。
3. 图像剪裁和旋转:Pillow 允许你剪裁图像中的特定区域,并提供了旋转和翻转图像的方法。
4. 滤镜和图像增强:Pillow 提供了众多的滤镜效果和图像增强功能,包括模糊、锐化、边缘检测、颜色调整等。
5. 像素级操作和通道操作:Pillow 支持对图像的像素级别操作,可以通过访问和修改每个像素的 RGB 值来实现各种自定义需求。此外,还可以对图像的通道进行分离和合并操作。
6. 文字添加和绘图功能:你可以使用 Pillow 在图像上添加文本,选择字体、大小和颜色。此外,Pillow 还支持在图像上绘制线条、矩形、圆形等基本形状。
7. 图像格式转换和图像模式处理:Pillow 允许你进行不同图像格式的转换,并提供了对图像模式(如 RGB、灰度、调色板等)的处理。
环境:
Pycharm
Python 3.9.16
安装:
pip install Pillow==9.5.0
导入:
from PIL import Image, ImageOps, ImageEnhance, ImageDraw, ImageFont, ImageFilter
(左右滑动查看完整代码)
首先,我们先准备一张原图:
my_image.jpg
* 信息:1,000x680 JPEG (24-bit color) 35.25 kB
(图片来源网络)
以下所有的操作,均以这张原图为基础。
调整图像尺寸
将原图调整尺寸为800*600
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 调整图像尺寸
resized_image = image.resize((800, 600))
resized_image.save('./images/调整图像尺寸.jpg')
# 关闭图像
image.close()
resized_image.close()
(左右滑动查看完整代码)
结果:
裁剪图像
将原图裁剪出远处的山峰
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 裁剪图像
cropped_image = image.crop((100, 200, 500, 400))
cropped_image.save('./images/set_image_2.jpg')
# 关闭图像
image.close()
cropped_image.close()
(左右滑动查看完整代码)
结果:
旋转图像
旋转图像分为逆时针方向和顺时针方向
将原图旋转图像(逆时针)30度
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 旋转图像(逆时针)30度
rotated_image = image.rotate(30)
rotated_image.save('./images/set_image_3.jpg')
# 关闭图像
image.close()
rotated_image.close()
(左右滑动查看完整代码)
结果:
将原图旋转图像(顺时针)30度
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 旋转图像(顺时针)30度
rotated_image = image.rotate(-30)
rotated_image.save('./images/set_image_3.jpg')
# 关闭图像
image.close()
rotated_image.close()
(左右滑动查看完整代码)
结果:
翻转图像
翻转图像分为左右方向、上下方向
将原图左右翻转
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 翻转图像-左右翻转
flipped_image_rl = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image_rl.save('./images/set_image_4.jpg')
# 关闭图像
image.close()
flipped_image_rl.close()
(左右滑动查看完整代码)
结果:
将原图上下翻转
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 翻转图像-上下翻转
flipped_image_ud = image.transpose(Image.FLIP_TOP_BOTTOM)
flipped_image_ud.save('./images/set_image_5.jpg')
# 关闭图像
image.close()
flipped_image_ud.close()
(左右滑动查看完整代码)
结果:
图像滤镜
Pillow 包提供了多种滤镜效果,常用的有模糊滤镜、边缘检测滤镜、锐化滤镜、轮廓滤镜、浮雕滤镜和加噪声滤镜等。
将原图模糊滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.save('./images/set_image_6.jpg')
# 关闭图像
image.close()
blurred_image.close()
(左右滑动查看完整代码)
结果:
将原图边缘检测滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 应用边缘检测滤镜
edge_detected_image = image.filter(ImageFilter.FIND_EDGES)
edge_detected_image.save('./images/set_image_7.jpg')
# 关闭图像
image.close()
edge_detected_image.close()
(左右滑动查看完整代码)
结果:
将原图锐化滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 应用锐化滤镜
edge_detected_image = image.filter(ImageFilter.FIND_EDGES)
edge_detected_image.save('./images/set_image_7.jpg')
# 关闭图像
image.close()
edge_detected_image.close()
(左右滑动查看完整代码)
结果:
将原图轮廓滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 轮廓滤镜
contour_image = image.filter(ImageFilter.CONTOUR)
contour_image.save('./images/set_image_9.jpg')
# 关闭图像
image.close()
contour_image.close()
(左右滑动查看完整代码)
结果:
将原图浮雕滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 浮雕滤镜
embossed_image = image.filter(ImageFilter.EMBOSS)
embossed_image.save('./images/set_image_10.jpg')
# 关闭图像
image.close()
embossed_image.close()
(左右滑动查看完整代码)
结果:
将原图加噪声滤镜
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 加噪声滤镜
noisy_image = image.filter(ImageFilter.GaussianBlur(radius=3))
noisy_image.save('./images/set_image_11.jpg')
# 关闭图像
image.close()
noisy_image.close()
(左右滑动查看完整代码)
结果:
图像特效
Pillow 包提供了多种图片特效,常用的有像素化特效、灰度化特效、反转颜色、调整亮度、调整对比度、添加水印等。
将原图像素化
注:size是一个正奇数
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 应用像素化特效
pixelated_image = image.filter(ImageFilter.MedianFilter(size=21))
pixelated_image.save('./images/set_image_12.jpg')
# 关闭图像
image.close()
pixelated_image.close()
(左右滑动查看完整代码)
结果:
将原图灰度化
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 灰度化
grayscale_image = ImageOps.grayscale(image)
grayscale_image.save('./images/set_image_13.jpg')
# 关闭图像
image.close()
grayscale_image.close()
(左右滑动查看完整代码)
结果:
将原图反转颜色
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 反转颜色
inverted_image = ImageOps.invert(image)
inverted_image.save('./images/set_image_14.jpg')
# 关闭图像
image.close()
inverted_image.close()
(左右滑动查看完整代码)
结果:
将原图调整亮度
注:调整亮度0.5为原始亮度,小于0.5降低亮度,大于0.5增加亮度
如下,增加原图亮度为1.5倍效果
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 创建亮度增强对象
enhancer = ImageEnhance.Brightness(image)
# 增加亮度 1.5 倍
brightened_image = enhancer.enhance(1.5)
brightened_image.save('./images/set_image_15.jpg')
# 关闭图像
image.close()
brightened_image.close()
(左右滑动查看完整代码)
结果:
将原图调整对比度
注:调整对比度1.0保持原始对比度,小于1.0减少对比度,大于1.0增加对比度
如下,增加原图对比度为2.0倍效果
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 创建对比度增强对象
enhancer = ImageEnhance.Contrast(image)
# 增加对比度2.0倍
contrasted_image = enhancer.enhance(2.0)
contrasted_image.save('./images/set_image_16.jpg')
# 关闭图像
image.close()
contrasted_image.close()
(左右滑动查看完整代码)
结果:
将原图的右下角添加水印
注:水印所需要的字体simsun.ttc是宋体
如下,将“来源网络”作为水印,设置25号大小,添加到原图的右下角
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 创建ImageDraw对象
draw = ImageDraw.Draw(image)
# 定义水印文本内容和字体
watermark_text = "来源网络"
font = ImageFont.truetype("simsun.ttc", size=25)
# 获取文本的包围框
text_bbox = draw.textbbox((0, 0), watermark_text, font)
# 计算水印文本的宽度和高度
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
# 获取图像尺寸
image_width, image_height = image.size
# 定义水印文本位置(右下角)
x = image_width - text_width - 10
y = image_height - text_height - 10
# 绘制水印文本
draw.text((x, y), watermark_text, fill=(255, 255, 255), font=font)
# 保存图像
image.save('./images/set_image_17.jpg')
# 关闭图像
image.close()
(左右滑动查看完整代码)
结果:
图像另存为其他格式
图像另存为其他格式其实很简单,就是打开原图,保存的时候换成指定的后缀名即可。
保存其他格式有JPEG、PNG、BMP、GIF、TIFF 等。
将原图保存为.png格式
# 打开指定的图片文件
image = Image.open('my_image.jpg')
# 保存图像文件为指定格式
image.save('output_image.png')
# 关闭图像
image.close()
(左右滑动查看完整代码)
总结
以上每种方式都是独立的,方便理解和使用 以上任何方式都可以相互叠加使用,有好想法就有好的作品 最后一定要记得关闭原始图像和处理后的图像,以免过多的占用资源 Pillow是一个强大的图像处理库,可根据自己实际需求既用既取
寄语:世间三美,明月,清风,眼前……
看到这儿的朋友帮点个“赞”和“在看”,谢谢支持~!
文章就分享到这儿,喜欢就点个赞吧!