11,875
社区成员




日常工作中,经常会遇到要批量的给图片加滤镜,加水印,按需求缩放图片等操作,如果不懂编程,可能就需要你用ps一张一张的打开图片,修改图片再保存,大量的重复工作将占用你很多宝贵的时间。如果需要处理的图片量大,即便是加班,也不一定能及时完成工作,且及其容易操作失误导致出错。
好在之前的任务中,我们已经掌握了批量搜索和处理文件的能力,也知道了如何用python来读写文件,现在我们只需要掌握任意一种图片处理库,就能很方便的用脚本来帮助我们完成今天的任务。
前面的任务中,我们使用的是python核心库中的模块,核心库中的模块,只需要import到当前脚本中就能调用模块中的功能。但此次任务,我们需要使用到功能并没有被包含的核心库,而是由第三方库提供,因此我们需要在自己的机器中安装第三方库。
opencv,matplotlib,Pillow是目前比较流行的支持图片处理的第三方库。
# 从PIL模块中导入Image对象,我们需要的缩放功能由Image对象提供
from PIL import Image
# 打开一个jpg图像,使用相对路径,打开文件的操作已经被Image对象库封装
img = Image.open('dog.jpg')
# 获得图像尺寸:
w, h = im.size
# print打印字符串使用字符串格式化输出图像大小,字符串中的%s为占位符
print('源图像大小为: %sx%s' % (w, h))
# 宽,高各自除以2,缩小到原来的一半
img.thumbnail((w/2, h/2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbdog.jpg', 'jpeg')
大部分的第三方库,使用pip install命令安装和使用ipmort导入的名称是相同的,但这里安装第三方库时,使用的库名称是pillow,导入包使用的是PIL,名称不一致。因为老版本的PIL只支持到python2.7,已经缺乏维护。在python3中,社区的开发者完全兼容老版本PIL的用法新发布了pillow
图像滤镜是图像处理中经常需要用到的操作,比如美颜中的磨皮操作就能让人肤白貌美,这个磨皮就用到了模糊滤镜;把彩色照片转化成黑白照片或者老旧照片就需要用到颜色滤镜,如果你对位图的的数据编码方式非常熟悉,你可以自己利用PIL创造特定的滤镜。(比较有难度,通常大部分开发者都不会自己去创建滤镜)
好在PIL已经预定一了一组常用滤镜,我们不需要知道细节就能直接使用。
我们以模糊滤镜为例
创建imageFilter.py文件
from PIL import Image, ImageFilter
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('dog.jpg')
# 应用模糊滤镜:
img = im.filter(ImageFilter.BLUR)
img.save('blurDog.jpg', 'jpeg')
ImageFilter.BLUR中的BLUR就是PIL预定一的模糊滤镜
我希望你自己能测试一下其他的与定义滤镜,看看它们分别都有哪些效果
BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SHARPEN
SMOOTH
SMOOTH_MORE_
PIL的ImageDraw提供了一系列绘图方法,可能有人会想,画图不应该是设计师用ps画的吗,为什么会需要用python程序画图。
其实想想身边的场景,你会发现很多时候机器画图有时候是无法替代的,比如生成网页表单验证码或者给图片加水印。
为图片添加水印的例子
# 导入包
from PIL import Image,ImageDraw,ImageFont
# 图片路径,必须是当前目录下
imagefile="dog.jpg"
# 打开图片
imageInfo=Image.open(imagefile)
# 获取图片尺寸
print(imageInfo.size)
# 设置图片水印的字体的字号
fontOne = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 36)
fontTwo = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 36)
# 创建Draw对象,用于之后绘制文字
draw=ImageDraw.Draw(imageInfo)
# 设置水印文字的位置(x,y),文本,颜色,字体字号
draw.text((imageInfo.size\[0] / 11, imageInfo.size\[1] / 20), "我爱学习,学习使我妈快乐", fill=(255, 0, 0), font=fontOne)
draw.text((imageInfo.size\[0] / 11, imageInfo.size\[1] / 20 + 40), "我妈快乐全家快乐", fill=(20, 150, 200), font=fontTwo)
# 图片预览
imageInfo.show()
# 图片保存
imageInfo.save("DogWaterMark.jpg")
如果运行报错,可能是系统找不到字体造成的,由于我使用苹果设备来编写文档,本例中使用的Arial是苹果操作系统自带字体,你们可以把font中设置为自己已电脑中已经安装的字体。
把今天学习的内容结合之前文件搜索的任务,完成对某个文件夹内文件批量搜索并添加水印的程序。
Day5练习作业:
详细阅读学习任务,完成对某个文件夹内文件批量搜索并添加水印的程序
作业提交
你可以这样做(任选其一):
1.将实验过程中遇到的问题、你的思考和想法整理成文字帖提交
2.录一个操作过程的视频放在帖子中提交
3.把你完成操作的代码结果拍照,照片放在帖子中提交
提交作业步骤:
1.进入 Python 全栈技术社区
2.点击右侧 “发帖子”,发布练习作业的内容,频道选择【7天学习】(标题格式:7天学习—dayX—标题)
3.进入Day5学习任务帖,点击“提交任务”按钮
4.填入发布作业的帖子链接后,确定提交
作业提交截止时间:
2021/9/24 19:00