python中运用Pillow处理图像-调整尺寸、裁剪、旋转、添加滤镜和特效等,实践版

文摘   科技   2023-08-16 19:17   北京  


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 - 10y = 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是一个强大的图像处理库,可根据自己实际需求既用既取



寄语:世间三美,明月,清风,眼前……


看到这儿的朋友帮点个“”和“在看”,谢谢支持~!

     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章