图像处理库Pillow(PIL)的使用-3(实例+详细注释+图片脚本)

前言

  • 在Python中,Pillow是一个强大的图像处理库,它是PIL(Python Imaging Library)的一个分支,支持"jpeg",“png”,“bmp”,“gif”,“ppm”,“tiff” 等多种图像文件格式,通过本篇文章,你将了解到pillow库不同功能的实践方法,不止有读取和保存图片,创建缩略图和合并到图像、模糊、裁剪、翻转和旋转图像、调整大小和添加水印、添加滤镜和处理图像颜色等等。后面还会讲解一些利用Pillow库制作的一些图片脚本以及利用pyqt5和tkinter做的图形化界面。

导航

pillow的使用篇

图片脚本篇

pillow库的使用

图像的增强

Pillow 通过 ImageFilter 类来实现图像的增强效果,该类中集成了不同种类的滤波器,可以通过调用它们从而实现图像的平滑、锐化、边界增强等图像增强操作
个人觉得这个挺有意思的,就是相当于图片加个滤镜。
下面我举几个会经常用的滤镜:

from PIL import Image,ImageFilter
# 创建一个图片对象
img = Image.open('images/bg.jpg')
# 应用高斯模糊滤镜
gaussian_img = img.filter(ImageFilter.GaussianBlur(radius=2))
# gaussian_img.show()
# 应用轮廓检测滤镜
contour_img = img.filter(ImageFilter.CONTOUR)
# contour_img.show()
# 应用锐化滤镜
sharp_img = img.filter(ImageFilter.SHARPEN)
# sharp_img.show()
# 应用边缘检测滤镜
edge_img = img.filter(ImageFilter.EDGE_ENHANCE)
# edge_img.show()
# 应用浮雕滤镜
emboss_img = img.filter(ImageFilter.EMBOSS)
# emboss_img.show()
# 应用模糊滤镜
blur_img = img.filter(ImageFilter.BLUR)
# blur_img.show()
# 应用中值模糊滤镜
median_img = img.filter(ImageFilter.MedianFilter(size=3))
# median_img.show()
# 应用细节增强滤镜
detail_img = img.filter(ImageFilter.DETAIL)
# detail_img.show()

输出:依次输出为高斯模糊滤镜,轮廓检测滤镜,锐化滤镜,边缘检测,浮雕滤镜
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加图片水印

Pillow 库提供了添加水印的方法,用了ImageDraw和ImageFont模块,下面我们讲解如何使用 PIilow 给图片添加水印。

ImageDraw

PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用,也可以理解为获取一个画布。
语法如下:
draw = ImageDraw.Draw(im)
上述方法会返回一个 ImageDraw 对象,参数 im 表示 Image 对象,通过调用 ImageDraw 对象的一些方法,实现了在画布上绘制出新的图形目的。
ImageDraw常用方法

  • text():在图像上绘制文字,需要结合ImageFont模块使用
  • line():绘制直线
  • eclipse():绘制椭圆形
  • rectangle():绘制矩形
  • polygon():绘制多边形
    下面分别介绍上述方法:

text(position, text, fill=None, font=None, anchor=None, spacing=0, align="left", direction=None, features=None, language=None)

  • position:文字左上角的坐标
  • text:要写入的文字内容
  • fill:文本颜色
  • font:字体类型和大小,必须为ImageFont中指定的font类型
  • spacing:行之间的像素数
  • align:文本对齐方式,可以是“left”、“center”或“right”
  • direction:文字方向,可以是’rtl’(从右到左)、‘ltr’(从左到右)或’ttb’(从上到下)
    示例在ImageFont的介绍

line([x1,y1,x2,y2],fill=None,width=0,joint=None)

  • [x1, y1, x2, y2]:直线的起点和终点坐标
  • fill:线条颜色
  • width:线条宽度
  • joint:一系列线之间的联合类型,可以是“曲线”等
    示例:
from PIL import Image, ImageDraw
# 实例化一个图像对象
image = Image.new('RGB', (200, 200), 'white')
# 获取绘图对象
draw = ImageDraw.Draw(image)
# 绘制直线
draw.line([(0, 0), (200, 200)], fill='blue', width=5)
# 显示图像
image.show()

输出:在这里插入图片描述

ellipse([x1, y1, x2, y2], fill=None, outline=None, width=0)

  • [x1, y1, x2, y2]:定义椭圆所在矩形的左上角和右下角坐标。
  • fill:椭圆填充颜色
  • outline:椭圆轮廓颜色
  • width:轮廓宽度
    示例:
from PIL import Image, ImageDraw
# 示例化一个图片对象
image = Image.new('RGB', (200, 200), 'white')
# 获取绘图对象
draw = ImageDraw.Draw(image)
# 绘制椭圆
draw.ellipse([(50, 50), (150, 150)], fill='green', outline='black', width=3)
# 显示图片
image.show()

输出:
在这里插入图片描述

rectangle([x1, y1, x2, y2], fill=None, outline=None, width=0)

  • [x1, y1, x2, y2]:矩形的左上角和右下角坐标。
  • fill:矩形填充颜色。
  • outline:矩形轮廓颜色。
  • width:轮廓宽度。
from PIL import Image, ImageDraw
# 实例化一个图像对象
image2 = Image.new('RGB', (200, 200), 'white')
# 获取绘图对象
draw2 = ImageDraw.Draw(image2)
# 绘制矩形
draw2.rectangle([(50, 50), (150, 150)], fill='red', outline='blue')
# 显示图像
image2.show()

输出:
在这里插入图片描述

polygon([x1, y1, x2, y2, ...], fill=None, outline=None)

  • [x1, y1, x2, y2, …]:多边形的顶点坐标
  • fill:多边形填充颜色
  • outline:多边形轮廓颜色
  • 示例:
from PIL import Image, ImageDraw
# 示例化一个图片对象
image = Image.new('RGB', (200, 200), 'white')
# 获取绘图对象
draw = ImageDraw.Draw(image)
# 绘制多边形
points = [(50, 50), (100, 150), (50, 150)]
draw.polygon(points, fill='red', outline='blue', width=3)
# 显示图片
image.show()

输出:在这里插入图片描述

ImageFont

PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字。
创建字体对象的语法格式如下:
font = ImageFont.truetype(font='字体文件路径', size=字体大小)
示例:

from PIL import Image, ImageDraw,ImageFont
# 实例化一个图片对象
image = Image.new('RGB', (200, 200), 'blue')
# 获取绘图对象
draw = ImageDraw.Draw(image)
# 设置字体
font = ImageFont.truetype('arial.ttf', 20)
# 绘制文字
draw.text((10, 10), 'python', font=font, fill='black')
# 显示图片
image.show()

输出:
在这里插入图片描述

共勉

强者制定规则,弱者讨论公平!

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
  • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值