Python使用Pillow库进行图像压缩与处理实战

方予
方予
发布时间:2026-10-16 | 5人浏览过
原创

本文详解如何利用Python的Pillow库进行图像压缩与处理。内容涵盖RGB颜色模型、像素概念、图像读取、剪裁、缩略图生成、缩放粘贴、旋转翻转、像素级操作及滤镜应用。此外,还介绍了ImageDraw模块的绘图功能,并对比了OpenCV库在计算机视觉领域的强大功能,旨在通过Python自动化处理繁琐图像任务。

入门了解1.颜色

若你有过使用颜料作画的经验,便知晓混合红、黄、蓝三种颜料可衍生出其他色彩,这三种即为美术领域的三原色,属于不可再分解的基本色。而在计算机系统中,通过不同比例叠加红、绿、蓝三种色光即可合成其他颜色,这三者被称为色光三原色。在计算机视觉处理中,颜色通常以RGB值或RGBA值表示,其中A代表Alpha通道,用于控制图像的透明度。

名称RGB值名称RGB值
White(白)(255, 255, 255)Red(红)(255, 0, 0)
Green(绿)(0, 255, 0)Blue(蓝)(0, 0, 255)
Gray(灰)(128, 128, 128)Yellow(黄)(255, 255, 0)
Black(黑)(0, 0, 0)Purple(紫)(128, 0, 128)

入门了解 2. 像素

对于由数字序列构成的图像而言,最小的构成单元是图像中单一颜色的小方格。每个小方格都有确定的位置和色彩数值,这些方格的颜色与位置共同决定了图像的最终呈现效果。作为不可分割的最小单位,它们被称为像素(pixel)。每幅图像都包含特定数量的像素,像素总量直接决定了图像在屏幕上的显示尺寸。对于摄影或自拍爱好者来说,对“像素”一词应当并不陌生。

用Pillow处理图像

Pillow是从著名的Python图像处理库PIL发展而来的分支,借助Pillow可实现图像压缩及多种图像处理操作。安装Pillow的命令如下所示。

pip install pillow

在Pillow库中,Image类最为核心,可通过Image模块的open函数读取图像文件,从而获取Image类型的对象。

1. 读取和显示图像

   from PIL import Image

   # 读取图像获得Image对象
   image = Image.open('guido.jpg')
   # 通过Image对象的format属性获得图像的格式
   print(image.format) # JPEG
   # 通过Image对象的size属性获得图像的尺寸
   print(image.size)   # (500, 750)
   # 通过Image对象的mode属性获取图像的模式
   print(image.mode)   # RGB
   # 通过Image对象的show方法显示图像
   image.show()

2. 剪裁图像

   # 通过Image对象的crop方法指定剪裁区域剪裁图像
   image.crop((80, 20, 310, 360)).show()

3. 生成缩略图

   # 通过Image对象的thumbnail方法生成指定尺寸的缩略图
   image.thumbnail((128, 128))
   image.show()

4. 缩放和黏贴图像

   # 读取骆昊的照片获得Image对象
   luohao_image = Image.open('luohao.png')
   # 读取吉多的照片获得Image对象
   guido_image = Image.open('guido.jpg')
   # 从吉多的照片上剪裁出吉多的头
   guido_head = guido_image.crop((80, 20, 310, 360))
   width, height = guido_head.size
   # 使用Image对象的resize方法修改图像的尺寸
   # 使用Image对象的paste方法将吉多的头粘贴到骆昊的照片上
   luohao_image.paste(guido_head.resize((int(width / 1.5), int(height / 1.5))), (172, 40))
   luohao_image.show()

5. 旋转和翻转

   image = Image.open('guido.jpg')
   # 使用Image对象的rotate方法实现图像的旋转
   image.rotate(45).show()
   # 使用Image对象的transpose方法实现图像翻转
   # Image.FLIP_LEFT_RIGHT - 水平翻转
   # Image.FLIP_TOP_BOTTOM - 垂直翻转
   image.transpose(Image.FLIP_TOP_BOTTOM).show()

6. 操作像素

   for x in range(80, 310):
       for y in range(20, 360):
           # 通过Image对象的putpixel方法修改图像指定像素点
           image.putpixel((x, y), (128, 128, 128))
   image.show()

7. 滤镜效果

   from PIL import ImageFilter

​​​​​​​   # 使用Image对象的filter方法对图像进行滤镜处理
   # ImageFilter模块包含了诸多预设的滤镜也可以自定义滤镜
   image.filter(ImageFilter.CONTOUR).show()

使用Pillow绘图

Pillow库中包含一个名为ImageDraw的模块,该模块的Draw函数将返回一个ImageDraw对象。利用该对象的arc、line、rectangle、ellipse、polygon等方法,可在图像上绘制圆弧、直线、矩形、椭圆及多边形等几何形状;同时,也可通过该对象的text方法在图像中添加文字内容。

完整的代码如下所示。

import random

from PIL import Image, ImageDraw, ImageFont


def random_color():
    """生成随机颜色"""
    red = random.randint(0, 255)
    green = random.randint(0, 255)
    blue = random.randint(0, 255)
    return red, green, blue


width, height = 800, 600
# 创建一个800*600的图像,背景色为白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 创建一个ImageDraw对象
drawer = ImageDraw.Draw(image)
# 通过指定字体和大小获得ImageFont对象
font = ImageFont.truetype('Kongxin.ttf', 32)
# 通过ImageDraw对象的text方法绘制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
# 通过ImageDraw对象的line方法绘制两条对角直线
drawer.line((0, 0, width, height), fill=(0, 0, 255), width=2)
drawer.line((width, 0, 0, height), fill=(0, 0, 255), width=2)
xy = width // 2 - 60, height // 2 - 60, width // 2 + 60, height // 2 + 60
# 通过ImageDraw对象的rectangle方法绘制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通过ImageDraw对象的ellipse方法绘制椭圆
for i in range(4):
    left, top, right, bottom = 150 + i * 120, 220, 310 + i * 120, 380
    drawer.ellipse((left, top, right, bottom), outline=random_color(), width=8)
# 显示图像
image.show()
# 保存图像
image.save('result.png')

注意:上述代码中引用的字体文件需自行准备,用户可选择喜爱的字体文件并将其放置于代码运行目录下。

总结

在使用Python进行开发时,除Pillow外,还可使用功能更强大的OpenCV库来处理图形图像。OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,可用于开发实时图像处理、计算机视觉及模式识别程序。在日常工作中,许多繁琐重复的任务均可通过Python程序自动化处理,编程的核心目的即在于让计算机协助解决问题,从而减少重复且乏味的劳动。

以上就是Python实现图像压缩和图像处理详解的详细内容,更多关于Python图像压缩的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表