前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像处理库Pillow(PIL)的使用-3(实例+详细注释+图片脚本)

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

原创
作者头像
laity
修改2025-02-26 17:16:59
修改2025-02-26 17:16:59
45700
代码可运行
举报
文章被收录于专栏:pillow库的使用pillow库的使用
运行总次数:0
代码可运行

@TOC

前言

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

导航

pillow库的使用篇

图片脚本篇

Tkiner库的使用篇

  • 图形化界面的开发(GUI):Tkinter库的使用-1(综述)
  • 图形化界面的开发(GUI):Tkinter库的使用-2(Label+Message+Text)
  • 图形化界面的开发(GUI):Tkinter库的使用用-3(Button+Radiobutton+Checkbutton)
  • 图形化界面的开发(GUI):Tkinter库的使用-4(Entry+Spinbox+Listbox+Combobox)
  • 图形化界面的开发(GUI):Tkinter库的使用-5(Menu+Canvas+Scale+Scrollbar)

pillow库的使用

图像的增强

Pillow 通过 ImageFilter 类来实现图像的增强效果,该类中集成了不同种类的滤波器,可以通过调用它们从而实现图像的平滑、锐化、边界增强等图像增强操作

个人觉得这个挺有意思的,就是相当于图片加个滤镜。

下面我举几个会经常用的滤镜:

代码语言:python
代码运行次数:0
运行
复制
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:一系列线之间的联合类型,可以是“曲线”等 示例:
代码语言:python
代码运行次数:0
运行
复制
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:轮廓宽度 示例:
代码语言:python
代码运行次数:0
运行
复制
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:轮廓宽度。
代码语言:python
代码运行次数:0
运行
复制
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:多边形轮廓颜色
  • 示例:
代码语言:python
代码运行次数:0
运行
复制
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=字体大小)

示例:

代码语言:python
代码运行次数:0
运行
复制
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)也发布了相应的教学视频

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导航
    • pillow库的使用篇
    • 图片脚本篇
    • Tkiner库的使用篇
  • pillow库的使用
    • 图像的增强
    • 添加图片水印
      • ImageDraw
      • ImageFont
  • 共勉
  • 博客
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档