Python使用Pillow库实现图片等分裁剪功能详解

 更新时间:2026年11月05日 08:24:35   作者:detayun  
日常做自动化、验证码识别、图像处理的时候,经常会有图片切割的需求,本文将详解Python中使用Pillow库进行图片裁剪的核心方法,感兴趣的小伙伴可以了解下

日常做自动化、验证码识别、图像处理的时候,经常会有图片切割的需求:比如把一张拼接图切成左右两半、把长图横向等分、或者按固定坐标裁剪局部区域。Python 中最方便的方案就是 Pillow(PIL)库,几行代码就能搞定图片裁剪。

前置依赖:

pip install pillow

一、核心原理:Image.crop()

Pillow 的 crop(box) 是裁剪图片的核心方法。
box 是一个四元组:(left, upper, right, lower)

  • left:裁剪区域距离图片左侧的 x 坐标
  • upper:裁剪区域距离图片顶部的 y 坐标
  • right:裁剪区域右边界 x 坐标
  • lower:裁剪区域下边界 y 坐标

重点:Pillow 的图片坐标系,原点 (0,0) 在图片左上角,x 向右增加,y 向下增加。

二、场景1:图片左右对半平分(你当前用到的场景)

需求:一张图从垂直中线切开,分成左右两张等宽图片。

逻辑:获取原图宽高,宽度除以2得到中线位置,分别裁剪左半部分、右半部分。

from PIL import Image

def split_img_left_right(img: Image.Image):
    w, h = img.size
    mid_x = w // 2
    # 左半图:x从0到中线
    left_part = img.crop((0, 0, mid_x, h))
    # 右半图:x从中线到原图宽度
    right_part = img.crop((mid_x, 0, w, h))
    return left_part, right_part

if __name__ == "__main__":
    img = Image.open("test.png")
    left, right = split_img_left_right(img)
    left.save("left.png")
    right.save("right.png")

注意细节:

如果原图宽度是奇数,w // 2 整数除法会让左边比右边多1个像素。

例:宽度 101,mid_x = 50,左图宽51,右图宽50。

如果业务要求右边多1像素,改成 mid_x = (w + 1) // 2 即可。

三、场景2:纵向等分切割(切成上下多张)

比如一张长图,均匀切成上下 N 块,思路和左右切割一致,只是对高度做等分:

from PIL import Image

def split_img_top_bottom(img: Image.Image, n: int):
    w, h = img.size
    block_h = h // n
    parts = []
    for i in range(n):
        y1 = i * block_h
        y2 = y1 + block_h
        part = img.crop((0, y1, w, y2))
        parts.append(part)
    return parts

四、场景3:按固定坐标自定义裁剪

很多时候不需要等分,只需要抠图片里指定一块区域,直接填坐标:

from PIL import Image
img = Image.open("test.png")
# 裁剪:x1=10, y1=20, x2=200, y2=100
crop_img = img.crop((10, 20, 200, 100))
crop_img.save("crop_result.png")

五、结合你之前的 resize 需求:切割后统一缩放

你之前用到 resize((355, 48), Image.LANCZOS),可以直接组合:切割完成之后,对两张子图做高质量缩放。

from PIL import Image

def split_and_resize(img: Image.Image, target_size=(355, 48)):
    w, h = img.size
    mid_x = w // 2
    left_part = img.crop((0, 0, mid_x, h))
    right_part = img.crop((mid_x, 0, w, h))
    # LANCZOS 适合缩小图片,画质更好
    left_part = left_part.resize(target_size, Image.LANCZOS)
    right_part = right_part.resize(target_size, Image.LANCZOS)
    return left_part, right_part

六、常见坑总结

  1. resize((w,h)) 参数顺序是 (宽,高),和 crop 不要搞混;
  2. Image.LANCZOS 插值算法:缩小图片效果优秀,放大图片不推荐;
  3. crop 传入的坐标超出原图范围会报错,使用前最好做坐标校验;
  4. 透明图 RGBA 模式裁剪后会保留透明通道,保存 jpg 会报错,需要提前转 RGB:img = img.convert("RGB");
  5. 打开图片时注意路径中文问题,Windows 环境下 Pillow 老版本对中文路径兼容性较差。

七、拓展

如果想要更复杂的网格切割(m行n列,切成网格小图),只需要双层循环,按宽高步长遍历裁剪即可。

切割图片是验证码识别、图像数据集预处理非常高频的操作,搭配 Pillow 的缩放、灰度、二值化,就能完成一套简单的图像预处理流水线。

到此这篇关于Python使用Pillow库实现图片等分裁剪功能详解的文章就介绍到这了,更多相关Python Pillow切割图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解python Matplotlib库的高级特性

    深入理解python Matplotlib库的高级特性

    Matplotlib是一款极其强大的Python数据可视化库,这篇文章中,我们将深入讨论 Matplotlib 的一些高级特性,包括对象导向接口、自定义颜色映射和样式、动态图形等,感兴趣的小伙伴跟着小编一起来探讨吧
    2023-07-07
  • python统计RGB图片某像素的个数案例

    python统计RGB图片某像素的个数案例

    这篇文章主要介绍了python统计RGB图片某像素的个数案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 详解python 条件语句和while循环的实例代码

    详解python 条件语句和while循环的实例代码

    这篇文章主要介绍了详解python 条件语句和while循环,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Django 实现购物车功能的示例代码

    Django 实现购物车功能的示例代码

    这篇文章主要介绍了Django 实现购物车功能的示例代码,实现了删除产品和显示购物车的一系列购物车的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 使用Python删除PDF文件名中的特定文字

    使用Python删除PDF文件名中的特定文字

    在处理大量PDF文件时,有时候我们可能需要对文件名进行批量修改,例如,我们可能需要将文件名中的特定文字删除或替换,今天,我将向大家介绍如何使用Python编写一个简单的程序,选择一个文件夹,并删除文件名中的指定文字,需要的朋友可以参考下
    2023-09-09
  • Python办公自动化之将任意文件转为PDF格式

    Python办公自动化之将任意文件转为PDF格式

    这种把某个文件转为pdf枯燥无聊的工作,既没有什么技术含量又累. 今天辰哥就教大家将任意文件批量转为PDF,这里以日常办公的word、excel、ppt为例,这三种格式的文件转为PDF.需要的朋友可以参考下
    2021-06-06
  • python遍历迭代器自动链式处理数据的实例代码

    python遍历迭代器自动链式处理数据的实例代码

    迭代器也是用来遍历对象成员的,下面这篇文章主要给大家介绍了关于python遍历迭代器自动链式处理数据的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • Python实现对新闻数据去重处理的方法详解

    Python实现对新闻数据去重处理的方法详解

    新闻去重和普通文本去重是不一样的,本文详细介绍了Python处理新闻数据的几套实用方案,从简单到工业可用,覆盖精准去重、模糊去重、海量新闻场景优化,有需要的小伙伴可以了解下
    2026-08-08
  • python requests库的使用

    python requests库的使用

    这篇文章主要介绍了python requests库的使用,帮助大家更好的利用python进行爬虫,感兴趣的朋友可以了解下
    2021-01-01
  • Python解析excel文件存入sqlite数据库的方法

    Python解析excel文件存入sqlite数据库的方法

    最近工作中遇到一个需求,需要使用Python解析excel文件并存入sqlite,本文就实现的过程做个总结分享给大家,文中包括数据库设计、建立数据库、Python解析excel文件、Python读取文件名并解析和将解析的数据存储入库,有需要的朋友们下面来一起学习学习吧。
    2016-11-11

最新评论