网易首页 > 网易号 > 正文 申请入驻

Pillow 常用函数手册

0
分享至

Pillow 库提供了从图像读取、创建和保存,到尺寸调整、颜色模式转换、滤镜处理与图像合成的一系列功能。图形绘制、文字标注和像素统计等操作,也可以通过相应接口完成。

这些功能分布在不同模块中。本文按模块整理常用接口,说明其用途、主要参数、返回值与使用方法,形成一份便于检索、对照和反复查阅的基础手册。

Pillow 是 Python 图像库 PIL 的后继项目,代码中仍以 PIL 作为导入名称。

安装:

pip install Pillow

本文的示例按条目独立运行。需要读取图片时,应将"photo.jpg"替换为实际文件路径;涉及字体时,应使用本机可读取且支持所需文字的字体文件。与 NumPy 互转的示例需要另行安装 NumPy。

下文给出常见写法与主要参数,不逐项展开所有可选参数。Image.open()等写法调用模块函数;img.resize()等写法调用图像对象的方法;ImageFilter.Kernel()等写法用于创建处理对象。

一、Image:图像创建与基本处理

Image 模块是图像处理的核心模块,既提供图像读取与创建函数,也定义了图像对象及其常用方法。读取、变换、像素访问和合成等基础操作,大多从这里开始。

1、图像读取、创建与输出

open()

用于读取图像文件,并建立图像对象。

Image.open(fp, mode="r", formats=None)

参数说明:

• fp:文件路径,或以二进制方式打开的文件对象

• mode:打开方式,目前使用 "r",表示读取

• formats:限制尝试识别的文件格式,例如 ["JPEG", "PNG"];省略时尝试已支持的格式

返回值:返回一个图像对象。

示例:

    

open() 采用延迟加载,通常先识别文件与读取基本信息,像素数据在实际使用时才加载。使用 with 可以在操作完成后关闭文件。size、mode 和 format 是属性,不是函数。

new()

用于创建指定模式、尺寸和底色的图像,常用于建立空白画布、背景或蒙版。

Image.new(mode, size, color=0)

参数说明:

• mode:图像模式,例如 "L"、"RGB" 或 "RGBA"

• size:图像尺寸,形式为(宽,高),单位为像素

• color:初始颜色,可使用颜色名称、十六进制字符串,或与模式对应的数值、元组

返回值:返回一个新图像对象。

示例:

RGB 使用三个颜色通道;RGBA 多一个透明度通道。在 8 位透明度通道中,0 表示完全透明,255 表示完全不透明。

save()

用于将图像对象保存为文件。

img.save(fp, format=None, **params)

参数说明:

• fp:输出文件路径,或可写入的文件对象

• format:输出格式,例如 "PNG"、"JPEG";使用文件路径时,通常可由扩展名判断

• **params:特定格式的保存参数,例如 JPEG 的 quality、PNG 的 compress_level

返回值:None,不返回新图像。

示例:

    

保存不会自动改变原文件,除非指定了相同路径。JPEG 不支持透明度;将透明图像直接转为 RGB 会丢弃透明度,如需指定背景,应先完成背景合成。quality 是 JPEG 编码质量参数,不是图像分辨率。

show()

用于临时预览图像,通常借助系统中的外部图像查看程序。

img.show(title=None)

参数说明:

• title:预览标题,实际是否显示取决于查看程序

返回值:None。

示例:

    

show() 适合调试与临时检查。在没有图形界面的环境中,应使用 save() 保存结果。它也不是在应用程序中嵌入图像界面的替代方案。

copy()

用于复制图像,得到可以独立修改的图像对象。

img.copy()

参数说明:不需要额外参数

返回值:返回图像副本。

示例:

copy() 适合在保留原图的同时进行原地修改。副本的像素数据独立,也可以在原文件关闭后继续使用。

close()

用于关闭图像并释放相关资源。

img.close()

参数说明:不需要额外参数

返回值:None。

示例:

    

关闭后,不应继续使用该对象进行像素处理。读取文件时,通常优先使用 with;批量处理图像时,尤其需要注意及时释放资源。

2、裁剪与几何变换

crop()

用于截取图像中的矩形区域。

img.crop(box=None)

参数说明:

• box:裁剪范围,形式为(左,上,右,下)

返回值:返回裁剪后的新图像。

示例:

    

右边界和下边界不包含在结果中,因此示例输出尺寸为(300,200)。图像坐标以左上角为原点,向右 x 增大,向下 y 增大。实际裁剪时,应先确认图像尺寸与所需区域。

resize()

用于将图像调整为指定尺寸。

img.resize(size, resample=None, box=None, reducing_gap=None)

参数说明:

• size:目标尺寸,形式为(宽,高)

• resample:重采样(Resampling)方法

• box:参与缩放的原图区域,省略时使用整张图像

• reducing_gap:大幅缩小时的优化参数,基础使用中可省略

常见重采样方法:

• Image.Resampling.NEAREST:最近邻,不混合相邻像素,常用于类别标签图或像素风格图像

• Image.Resampling.BILINEAR:双线性插值,速度与平滑效果较均衡

• Image.Resampling.BICUBIC:双三次插值,通常具有更平滑的效果

• Image.Resampling.LANCZOS:常用于照片缩小,兼顾细节与平滑效果

返回值:返回指定尺寸的新图像。

示例:

    

目标宽高比与原图不同时,画面会变形。若需保持比例,可使用 thumbnail() 或 ImageOps 中的尺寸适配函数。

thumbnail()

用于生成不超过指定尺寸、并保持原图比例的缩略图。

)

参数说明:

• size:允许的最大宽度和高度

• resample:重采样方法

• reducing_gap:缩小时的优化参数

返回值:None,直接修改当前图像对象。

示例:

    

thumbnail() 不会为达到目标尺寸而放大小图,也不保证输出尺寸恰好等于传入尺寸。不能写成 result = img.thumbnail(...),否则 result 会得到 None。

rotate()

用于按指定角度旋转图像。

)

参数说明:

• angle:旋转角度,单位为度,正值表示逆时针旋转

• resample:重采样方法,支持 NEAREST、BILINEAR、BICUBIC

• expand:是否扩大输出画布以容纳旋转结果

• center:旋转中心,省略时使用图像中心

• translate:旋转后的平移量,形式为(水平位移,垂直位移)

• fillcolor:旋转产生的空白区域颜色

返回值:返回旋转后的新图像。

示例:

    

expand=False 时,旋转后超出原画布的内容可能被裁掉。需要简单翻转或旋转 90° 的整数倍时,也可以使用 transpose()。

transpose()

用于左右翻转、上下翻转或按固定角度旋转图像。

img.transpose(method)

参数说明:

• method:变换方式

常见选项:

• Image.Transpose.FLIP_LEFT_RIGHT:左右翻转

• Image.Transpose.FLIP_TOP_BOTTOM:上下翻转

• Image.Transpose.ROTATE_90:逆时针旋转 90°

• Image.Transpose.ROTATE_180:旋转 180°

• Image.Transpose.ROTATE_270:逆时针旋转 270°

返回值:返回变换后的新图像。

示例:

    

图像对象的 transpose() 表示像素位置变换,其参数与 NumPy 数组的转置用法不同。

3、模式转换与像素访问

convert()

用于转换图像的像素表示模式。

img.convert(mode=None, matrix=None, dither=None, palette=0, colors=256)

参数说明:

• mode:目标模式,例如 "L"、"RGB"、"RGBA"

• matrix:特定颜色转换使用的转换矩阵,基础使用中通常省略

• dither:特定降色转换中的抖动处理方式

• palette:转换为调色板模式时的调色板策略

• colors:使用自适应调色板时的颜色数量

返回值:返回模式转换后的新图像。

示例:

    

模式与文件格式不同。convert("L") 改变像素表示方式,save("gray.png") 则指定文件编码。转为 RGBA 也不表示自动去除背景。

split()/merge()

split() 用于拆分颜色通道,merge() 用于将单通道图像组合成多通道图像。

Image.merge(mode, bands)

参数说明:

• mode:合并后的目标模式,例如 "RGB"

• bands:单通道图像组成的序列,数量需与目标模式匹配,各通道尺寸应一致

返回值:

• split() 返回由各通道图像组成的元组。

• merge() 返回合并后的新图像。

示例:

    

拆出的 RGB 通道是单通道图像,单独显示时表现为灰度。通道分离常用于观察颜色分布或进行分通道处理。

getpixel()/putpixel()

用于读取或修改指定位置的像素。

img.putpixel(xy, value)

参数说明:

• xy:像素坐标,形式为(x,y)

• value:新像素值。L 模式通常使用整数;RGB 模式使用三元组;RGBA 模式使用四元组

返回值:

• getpixel() 返回该位置的像素值。

• putpixel() 返回 None,直接修改当前图像。

示例:

这组方法适合检查少量像素。大规模像素计算通常更适合使用 NumPy 数组,避免逐像素 Python 循环。

point()

用于按照映射规则逐像素转换数值,可用于阈值处理或简单亮度映射。

img.point(lut, mode=None)

参数说明:

• lut:查找表(Lookup Table),或用于生成映射表的函数

• mode:输出模式,基础使用中通常省略

返回值:返回映射后的新图像。

示例:

    

示例得到只有 0 和 255 两种值的 L 模式图像,并不是自动转换为 1 模式。point() 根据当前像素值进行映射,不进行邻域加权计算。

histogram()

用于统计各像素值出现的次数。

img.histogram(mask=None, extrema=None)

参数说明:

• mask:可选蒙版(Mask),用于限定统计区域

• extrema:某些模式下的统计范围,普通 8 位图像通常不必设置

返回值:返回计数列表。

示例:

    

8 位灰度图像通常返回 256 个计数。RGB 图像返回三个通道直方图的顺序拼接,共 768 个计数。它返回统计数据,不会直接绘制直方图。

fromarray()

用于将 NumPy 等数组接口对象转换为图像。

Image.fromarray(obj, mode=None)

参数说明:

• obj:具有数组接口的对象

• mode:目标模式,通常让 Pillow 根据数组结构与类型推断即可

返回值:返回图像对象。

示例:

本例需要通过 pip install numpy 安装 NumPy。数组形状为(高,宽,通道数),图像 size 为(宽,高)。普通 RGB 图像常使用 uint8 数组;浮点数或其他形状的数组不能一概当作普通彩色图像处理。

4、粘贴与图像合成

paste()

用于将图像或颜色粘贴到当前图像中。

img.paste(im, box=None, mask=None)

参数说明:

• im:待粘贴图像,或填充颜色

• box:目标位置,可为(左,上),或(左,上,右,下)

• mask:可选蒙版,用于控制各位置的粘贴程度

返回值:None,直接修改当前图像。

示例:

使用四元素区域粘贴图像时,其尺寸应与区域匹配。paste() 适合拼图、局部替换或按蒙版混合;需要保留正确的透明度叠加结果时,可使用 alpha_composite()。

blend()

用于按固定比例混合两张图像。

Image.blend(im1, im2, alpha)

参数说明:

• im1、im2:模式和尺寸相同的两张图像

• alpha:第二张图像的混合比例,常用范围为 0~1

返回值:返回混合后的新图像

示例:

alpha=0 得到第一张图,alpha=1 得到第二张图。这里是固定比例的像素插值,不是依据每张图像透明度通道完成叠加。

composite()

用于依据蒙版,将两张图像组合起来。

Image.composite(image1, image2, mask)

参数说明:

• image1、image2:模式和尺寸相同的两张图像

• mask:与图像尺寸一致的蒙版,可使用 "1"、"L" 或 "RGBA" 模式

返回值:返回合成后的新图像。

示例:

对于 L 模式蒙版,255 选择第一张图,0 选择第二张图,中间值按比例混合。蒙版控制的是选择与混合程度。

alpha_composite()

用于依据透明度通道,将一张图像叠加到另一张图像上。

Image.alpha_composite(im1, im2)

参数说明:

• im1:底层图像,模式为 RGBA 或 LA

• im2:上层图像,模式和尺寸必须与底层图像相同

返回值:返回透明度合成后的新图像。

示例:

这里介绍的是模块函数 Image.alpha_composite()。图像对象也有同名方法 img.alpha_composite(...),但该方法会修改当前图像,不应混淆其返回值。

putalpha()

用于添加或替换图像的透明度通道。

img.putalpha(alpha)

参数说明:

• alpha:0~255 的整数,或与图像尺寸相同的单通道蒙版

返回值:None,直接修改当前图像。

示例:

整数控制整张图像的透明度;蒙版可以为不同位置设置不同透明度。需要保留透明效果时,应保存为支持透明度的格式,例如 PNG。

二、ImageOps:常用图像操作

ImageOps 模块将方向校正、保持比例的尺寸适配,以及一些常见像素变换封装为模块函数,适合简化图像预处理代码。

exif_transpose()

用于根据照片中的 EXIF 方向信息校正像素方向。

ImageOps.exif_transpose(image, in_place=False)

参数说明:

• image:待处理图像

• in_place:是否原地修改,默认为 False

返回值:默认返回处理后的图像;in_place=True 时修改原对象并返回 None。

示例:

    

某些照片只记录了方向标记,而没有实际旋转像素。裁剪或统一尺寸之前先校正方向,有助于避免坐标和显示方向不一致。该操作还会移除已应用的方向标记,避免重复旋转。

mirror()/flip()

用于左右翻转或上下翻转图像。

ImageOps.flip(image)

参数说明:

• image:输入图像

返回值:返回翻转后的新图像。

示例:

    

mirror() 对应左右翻转,flip() 对应上下翻转。这两个函数表达更直观,也可以用 Image 中的 transpose() 完成。

contain()

用于保持原图比例,将图像调整到目标尺寸范围之内。

)

参数说明:

• image:输入图像

• size:允许的最大宽度和高度

• method:重采样方法

返回值:返回缩放后的新图像。

示例:

    

contain() 不裁剪也不补边,因此输出尺寸可能小于目标尺寸。与 thumbnail() 不同,它返回新图像,而且可能放大较小的原图。

fit()

用于保持比例缩放并裁剪,得到指定尺寸的图像。

)

参数说明:

• image:输入图像

• size:目标输出尺寸

• method:重采样方法

• bleed:先从四周去除的边缘比例,默认为 0,取值应小于 0.5

• centering:裁剪位置,两个数分别控制水平与垂直方向,取值范围为 0~1

返回值:返回指定尺寸的新图像。

示例:

    

默认从中心裁剪。fit() 可以避免直接拉伸,但会舍弃部分画面,可能裁掉边缘处的主体。

pad()

用于保持比例缩放并补边,得到指定尺寸的图像。

)

参数说明:

• image:输入图像

• size:目标输出尺寸

• method:重采样方法

• color:补边颜色

• centering:缩放后图像在目标画布中的位置

返回值:返回指定尺寸的新图像。

示例:

    

pad() 保留完整画面,但会引入补边。模型输入需要固定尺寸时,应根据任务要求选择 fit() 或 pad(),并保持训练与推理时的处理方式一致。

grayscale()/invert()

grayscale() 用于转为灰度图像,invert() 用于反转像素值。

ImageOps.invert(image)

参数说明:

• image:输入图像。本例使用 RGB 或 L 图像

返回值:返回处理后的新图像。

示例:

    

grayscale() 返回 L 模式图像。对 8 位灰度值,反转相当于用 255 减去原值。RGBA 图像不能直接套用本例的 invert(),需要单独处理颜色与透明度通道。

autocontrast()

自动对比度,用于依据图像直方图扩展明暗范围。

)

参数说明:

• image:输入图像,常使用 L 或 RGB 模式

• cutoff:从直方图低端和高端忽略的像素百分比,可使用单个数或二元组

• ignore:不参与范围估计的像素值

• mask:用于限定范围估计区域的蒙版

• preserve_tone:是否采用保持色调的处理方式

返回值:返回调整后的新图像。

示例:

    

cutoff=1 表示在低端与高端各忽略 1% 的像素,以减弱极端值对范围估计的影响。它与按固定系数调整对比度的 ImageEnhance.Contrast() 不同。

equalize()

用于直方图均衡化(Histogram Equalization),重新分配像素值,以调整明暗层次。

ImageOps.equalize(image, mask=None)

参数说明:

• image:输入图像,常使用 L 或 RGB 模式

• mask:可选蒙版,用于限定参与直方图统计的区域

返回值:返回均衡化后的新图像。

示例:

    

均衡化可能增强部分细节,也可能放大噪声。直接对 RGB 图像处理还可能改变颜色表现,因此应结合具体任务判断。

expand()

用于在图像四周添加边框。

ImageOps.expand(image, border=0, fill=0)

参数说明:

• image:输入图像

• border:边框宽度,可使用整数,或(左,上,右,下)四元组

• fill:边框颜色

返回值:返回扩展后的新图像。

示例:

    

expand() 添加固定像素宽度的边框,不会自动缩放原图。pad() 则围绕目标输出尺寸进行缩放与补边。

三、ImageFilter:模糊、锐化与邻域滤波

ImageFilter 模块提供预定义滤镜和可配置的滤镜类。一般先创建或选择滤镜,再通过图像对象的 filter() 方法应用。

filter()与预定义滤镜

用于将滤镜应用到图像。

img.filter(filter)

参数说明:

• filter:滤镜对象,或预定义滤镜

常见预定义滤镜:

• ImageFilter.BLUR:模糊

• ImageFilter.SHARPEN:锐化

• ImageFilter.SMOOTH / SMOOTH_MORE:平滑或较强平滑

• ImageFilter.DETAIL:增强细节

• ImageFilter.EDGE_ENHANCE / EDGE_ENHANCE_MORE:边缘增强

• ImageFilter.FIND_EDGES:突出局部边缘变化

• ImageFilter.CONTOUR:轮廓效果

• ImageFilter.EMBOSS:浮雕效果

返回值:filter() 返回处理后的新图像。

示例:

    

filter() 本身属于 Image 图像对象的方法,ImageFilter 提供它使用的滤镜。预定义滤镜适合快速获得效果;需要控制强度时,可选择带参数的滤镜。

BoxBlur()

用于盒式模糊(Box Blur),按照周围区域的平均值进行平滑。

ImageFilter.BoxBlur(radius)

参数说明:

• radius:模糊半径,可使用非负数,也可分别指定水平与垂直方向的半径

返回值:返回滤镜对象;传给 filter() 后得到新图像。

示例:

    

radius=0 不产生模糊;整数半径为 1 时,邻域为 3 × 3。半径增大通常会增强平滑效果,同时削弱更多细节。

GaussianBlur()

用于高斯模糊(Gaussian Blur),按随距离变化的权重进行平滑。

ImageFilter.GaussianBlur(radius=2)

参数说明:

• radius:高斯核的标准差,可使用非负数,也可分别指定两个方向

返回值:返回滤镜对象。

示例:

    

radius 通常越大,模糊程度越大。Pillow 使用扩展盒式滤波近似高斯核,并不是固定使用某个 3 × 3 矩阵。

MedianFilter()

用于中值滤波(Median Filtering),将邻域像素排序,并选取中间位置的值。

ImageFilter.MedianFilter(size=3)

参数说明:

• size:邻域边长,应使用正奇数,例如 3、5、7

返回值:返回滤镜对象。

示例:

    

中值滤波常用于减弱椒盐噪声。它采用排序规则,是非线性滤波,不是固定核权重的卷积。RGB 图像会按通道处理,结果不一定对应邻域中某个原有的完整颜色。

UnsharpMask()

USM 锐化,用于反锐化掩模(Unsharp Mask)锐化,通过原图与模糊图之间的差异增强细节。

ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)

参数说明:

• radius:生成模糊参考图时的半径

• percent:锐化强度,以百分数表示

• threshold:触发锐化所需的最小明暗变化,用于抑制轻微变化的增强

返回值:返回滤镜对象。

示例:

    

虽然名称包含“反锐化”,它实际用于锐化。过高的强度可能放大噪声或产生边缘光晕,不能把它理解为恢复所有丢失的细节。

Kernel()

用于创建自定义核,按邻域权重进行加权计算。

ImageFilter.Kernel(size, kernel, scale=None, offset=0)

参数说明:

• size:核尺寸,支持(3,3)和(5,5)

• kernel:按行排列、展平后的权重序列,数量需与核尺寸匹配

• scale:加权总和的除数;省略时使用权重之和

• offset:除以 scale 后增加的偏移量

返回值:返回自定义滤镜对象。

示例:

    

Kernel() 支持 L 和 RGB 图像。权重和为 0 的核应显式设置非零 scale,例如 scale=1。Pillow 应用前会将核上下翻转;无法完整应用核的边界像素保留原值。8 位输出会限制在 0~255,若需保留带符号或小数的响应,应使用数组进行计算。

四、ImageEnhance:亮度、对比度与颜色增强

ImageEnhance 模块使用统一接口调整图像表现:先建立增强对象,再调用 enhance()。各增强类用于创建增强对象,调用其 enhance() 方法后,才返回调整后的新图像。

Brightness()/Contrast()/Color()/Sharpness()

分别用于调整亮度、对比度、颜色强度和锐度。

ImageEnhance.Sharpness(image).enhance(factor)

参数说明:

• image:输入图像

• factor:调整系数,常用非负值;1 表示保持原有表现,小于 1 表示减弱,大于 1 表示增强

各类的含义:

• Brightness:factor=0 得到黑色图像,透明度通道在存在时保留

• Contrast:factor=0 得到均匀灰色的颜色内容

• Color:factor=0 去除颜色差异,呈现灰度效果

• Sharpness:factor=0 得到平滑结果,1 保持原图,大于 1 增强锐度

返回值:构造调用返回增强对象;enhance() 返回调整后的新图像。

示例:

    

示例中的四项分别作用于同一张原图。需要连续处理时,应把上一步的返回图像传给下一步。增强颜色不等于转换颜色模式,增强锐度也不等于提高像素尺寸。

五、ImageDraw:图形与文字绘制

ImageDraw 模块用于在图像上绘制线条、矩形、椭圆、多边形和文字。它通常直接修改所绑定的图像,而不是返回一张新图像。

Draw()

用于建立绘图对象。

ImageDraw.Draw(im, mode=None)

参数说明:

• im:准备绘制的图像

• mode:可选绘图模式;基础使用中通常省略。对 RGB 图像,可使用 "RGBA" 绘制带透明度混合的颜色

返回值:返回绘图对象。

示例:

绘图对象与 img 关联,后续绘制会改变 img 的像素。希望保留原图时,应先创建副本。

line()

用于绘制线段或折线。

draw.line(xy, fill=None, width=0, joint=None)

参数说明:

• xy:点坐标序列,可使用(x,y)元组组成的列表

• fill:线条颜色

• width:线宽,单位为像素

• joint:折线连接样式,可使用 "curve" 获得圆滑连接

返回值:None,直接绘制到图像。

示例:

多组点会依次连接,适合标记路径或添加引导线。需要图表坐标、刻度和图例时,通常使用 Matplotlib 更方便。

rectangle()/rounded_rectangle()

用于绘制矩形或圆角矩形。

draw.rounded_rectangle(xy, radius=0, fill=None, outline=None, width=1)

参数说明:

• xy:矩形范围,形式为(左,上,右,下)

• radius:圆角半径

• fill:填充颜色

• outline:边框颜色

• width:边框宽度

返回值:None。

示例:

rectangle() 的边界坐标包含端点,与 crop() 排除右、下边界的规则不同。给检测框或标注区域绘制边框时,应核对数据采用的坐标约定。

ellipse()/polygon()

用于绘制椭圆或多边形。

draw.polygon(xy, fill=None, outline=None, width=1)

参数说明:

• ellipse() 的 xy:椭圆外接矩形,形式为(左,上,右,下)

• polygon() 的 xy:多边形顶点坐标序列

• fill:填充颜色

• outline:边框颜色

• width:边框宽度

返回值:None。

示例:

椭圆的外接矩形宽高相同时,可绘制圆。多边形会自动连接首尾顶点,也常用于建立区域蒙版。

text()/multiline_text()

用于绘制单行或多行文字。

)

参数说明:

• xy:文字定位点

• text:文字内容,多行文字可使用换行符

• fill:文字颜色

• font:字体对象

• anchor:文字相对于定位点的位置。单行文字可用 "lt" 表示左上、"mm" 表示居中;横向多行文字不支持 "lt" 等包含顶部或底部定位的锚点,基础使用可保留默认值

• stroke_width / stroke_fill:文字描边宽度与颜色

• spacing:行间额外间距,单位为像素

• align:多行文字的行间对齐方式,例如 "left"、"center"、"right"

返回值:None。

示例:

中文显示取决于字体是否包含相应字形。align 控制多行文字之间的对齐,anchor 控制整段文字相对于 xy 的位置,两者作用不同。

textbbox()/textlength()

用于测量文字占用范围或排版推进长度。

draw.textlength(text, font=None)

参数说明:

• xy:用于测量文字边界的定位点

• text:待测量文字

• font:字体对象

• anchor:边界计算使用的文字定位方式

• stroke_width:计算边界时考虑的描边宽度

返回值:

• textbbox() 返回(左,上,右,下)。

• textlength() 返回文字的水平排版长度,通常为浮点数。

示例:

可见字形边界与排版推进长度不一定相同。边界宽高应使用 right-left、bottom-top 计算;多行文字的整体边界应使用 multiline_textbbox()。

六、ImageFont:字体加载与测量

ImageFont 负责创建字体对象,通常与 ImageDraw 配合使用。字体决定字形、字号与可显示的字符范围。

truetype()

用于读取 TrueType 或 OpenType 字体。

)

参数说明:

• font:字体文件路径,或可读取的字体文件对象

• size:字号,单位为像素

• index:字体集合中的字体索引,通常使用默认值 0

• encoding:字符编码设置,通常保留默认值

• layout_engine:文字布局引擎,基础使用中通常不必设置

返回值:返回 FreeTypeFont 字体对象。

示例:

示例使用 Windows 上常见的微软雅黑字体路径,运行前应确认文件存在。其他系统应改为实际字体路径。文件不可读取时会产生异常;缺少中文字形时,即使字体成功加载,也不能正确显示中文。

load_default()

用于加载 Pillow 提供的默认字体。

ImageFont.load_default(size=None)

参数说明:

• size:可选字号;可调整大小的默认字体需要 FreeType 支持

返回值:返回默认字体对象,具体类型取决于运行环境。

示例:

默认字体适合简单英文标注,不应假定它支持中文。需要中文或特定排版风格时,应加载合适的字体文件。

getbbox()/getlength()

用于通过字体对象测量文字。

font.getlength(text)

参数说明:

• text:待测量文字

返回值:

• getbbox() 返回文字相对于字体定位原点的边界四元组。

• getlength() 返回文字排版推进长度。

示例:

这组方法适合尚未建立画布时进行测量。已在画布上定位文字时,使用 ImageDraw 的 textbbox() 通常更直接。

七、ImageColor:颜色解析

ImageColor 模块用于把颜色名称或字符串转换为可计算的颜色值,也被图像创建和绘图操作内部使用。

getrgb()/getcolor()

getrgb() 解析颜色字符串;getcolor() 根据目标模式返回对应颜色值。

ImageColor.getcolor(color, mode)

参数说明:

• color:颜色名称或字符串,例如 "red"、""、"rgb(255, 0, 0)"

• mode:目标模式,例如 "RGB"、"RGBA"、"L"

返回值:

• getrgb() 通常返回 RGB 元组;字符串包含透明度时可返回 RGBA 元组。

• getcolor() 返回与目标模式对应的颜色值。

示例:

颜色字符串便于阅读,数值或元组便于计算。RGB 元组的通道值通常使用 0~255,而 Matplotlib 的浮点 RGB 元组常使用 0~1,不能直接混用。

八、ImageChops:逐像素图像运算

ImageChops 模块提供图像之间的逐像素运算,适合比较图像差异、组合蒙版或实现简单混合效果。下列示例使用模式和尺寸相同的 8 位图像。

difference()

用于计算两张图像对应像素的绝对差。

ImageChops.difference(image1, image2)

参数说明:

• image1、image2:待比较图像

返回值:返回差异图像。

示例:

    

相同位置的相同数值产生 0。差异图有助于观察处理改变了哪些区域,但不等于对图像质量的完整评价。

lighter()/darker()/multiply()

用于逐像素取较大值、较小值,或进行归一化乘法。

ImageChops.multiply(image1, image2)

参数说明:

• image1、image2:参与运算的两张图像

返回值:返回运算后的新图像。

示例:

对 8 位图像,multiply() 相当于对应值相乘后除以 255。白色不改变另一个输入,黑色使结果为黑。RGB 运算分别作用于各通道,不是比较整像素的视觉亮度。

九、ImageStat:图像基础统计

ImageStat 模块用于计算整张图像或指定区域的像素统计量,适合快速查看各通道的均值、标准差和取值情况。

Stat()

用于建立图像统计对象。

ImageStat.Stat(image_or_list, mask=None)

参数说明:

• image_or_list:输入图像,或预先计算的直方图列表

• mask:可选蒙版,用于限定统计区域

返回值:返回统计对象,结果通过属性读取。

常用属性:

• mean:各通道平均值

• median:各通道中位数

• stddev:各通道标准差

• var:各通道方差

• extrema:各通道最小值与最大值

• count:各通道参与统计的像素数量

示例:

    

RGB 图像的结果通常按红、绿、蓝顺序排列。ImageStat 的统计基于直方图,尤其适合每通道 8 位图像;高位深或浮点数据需要精确数值统计时,通常应转为 NumPy 数组处理。

小结

PIL 常用接口按模块分工,涵盖图像读写、尺寸变换、滤镜与增强、图形与文字绘制,以及颜色解析、像素运算和统计。使用时应核对图像模式、参数含义与返回值,尤其要区分创建新图像和原地修改。


“点赞有美意,赞赏是鼓励”

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
真是把“贪”字刻脑门上了!男子花钱与陪酒的公主开房,一次不够要求再来一次,公主妥协答应后,男子又得寸进尺!

真是把“贪”字刻脑门上了!男子花钱与陪酒的公主开房,一次不够要求再来一次,公主妥协答应后,男子又得寸进尺!

王老师你还好吗
2026-10-09 03:12:24
WTT中国大满贯:4强对阵出炉!国乒3席日本1席,亚运冠军3:0晋级

WTT中国大满贯:4强对阵出炉!国乒3席日本1席,亚运冠军3:0晋级

国乒二三事
2026-10-09 06:54:16
刘丁硕疑似质疑中国乒协:我们花钱挨骂!赢了是球迷,输了就成饭圈了

刘丁硕疑似质疑中国乒协:我们花钱挨骂!赢了是球迷,输了就成饭圈了

念洲
2026-10-09 11:34:16
印尼总统普拉博沃,最新涉华表态

印尼总统普拉博沃,最新涉华表态

政知新媒体
2026-10-09 10:44:00
王楚钦现场观战!温瑞博2-3惜败无缘8强,莫雷加德表达不满,直言对手太磨蹭

王楚钦现场观战!温瑞博2-3惜败无缘8强,莫雷加德表达不满,直言对手太磨蹭

乒谈
2026-10-08 22:33:18
蔡康永凉透,李成儒竟口碑大逆转,网友:原来你当年就看出来了!

蔡康永凉透,李成儒竟口碑大逆转,网友:原来你当年就看出来了!

老吴教育课堂
2026-10-08 12:54:58
曾4次阴阳中国!对决郑钦文前1天 斯维托丽娜去了趟故宫并发了照片

曾4次阴阳中国!对决郑钦文前1天 斯维托丽娜去了趟故宫并发了照片

风过乡
2026-10-09 07:44:20
尊界官方回应来了:将优化刹车踏板设计,已交车用户免费升级

尊界官方回应来了:将优化刹车踏板设计,已交车用户免费升级

车东西
2026-10-08 22:05:19
当年日本豪言"50年30个诺奖"计划,如今走到哪一步了?

当年日本豪言"50年30个诺奖"计划,如今走到哪一步了?

抽象派大师
2026-10-09 00:22:13
杭州地标酒店打包上市,普通人也能当 “房东”!老板是74岁萧山人,曾在港交所“两进两出”

杭州地标酒店打包上市,普通人也能当 “房东”!老板是74岁萧山人,曾在港交所“两进两出”

都市快报橙柿互动
2026-10-09 00:44:42
比瑞金中山医院还牛的医院,在上海悄悄出现了

比瑞金中山医院还牛的医院,在上海悄悄出现了

新时代的两性情感
2026-10-09 05:40:16
王高飞谈尊界V800踏板断裂:没出事故就是风险不是致命危险

王高飞谈尊界V800踏板断裂:没出事故就是风险不是致命危险

薛定谔的BUG
2026-10-08 16:58:45
刹车踏板事件升级!某刹车踏板厂商董事长直指媒体测试工况失当,网友:这位董事长和贾国龙有一拼

刹车踏板事件升级!某刹车踏板厂商董事长直指媒体测试工况失当,网友:这位董事长和贾国龙有一拼

火山詩话
2026-10-09 12:31:18
局势彻底变天了!中日对峙一天天拖下去,越来越多国家终于意识到:中日若兵戎相见,不会像俄乌冲突那样给第三方牟利的机会,而是一场血战

局势彻底变天了!中日对峙一天天拖下去,越来越多国家终于意识到:中日若兵戎相见,不会像俄乌冲突那样给第三方牟利的机会,而是一场血战

林杰论事
2026-10-03 02:28:50
细思极恐!暴力催收消失后,网贷开启司法软暴力收割,杀伤力翻倍

细思极恐!暴力催收消失后,网贷开启司法软暴力收割,杀伤力翻倍

呼呼历史论
2026-10-09 04:14:54
黄仁勋签了女粉丝的胸,更炸裂的来了!

黄仁勋签了女粉丝的胸,更炸裂的来了!

互联网品牌官
2026-10-08 15:08:44
王皓报警不到24小时,大半个饭圈被拉下水,王楚钦成众矢之的

王皓报警不到24小时,大半个饭圈被拉下水,王楚钦成众矢之的

观察鉴娱
2026-10-08 10:23:28
华人妈妈带娃吃生日餐,被白人男子当面要求“让孩子闭嘴”!发帖诉委屈,网友却不全买账

华人妈妈带娃吃生日餐,被白人男子当面要求“让孩子闭嘴”!发帖诉委屈,网友却不全买账

华人生活网
2026-10-07 04:53:41
乘客欧先生拒不道歉,东航再发通报!此人已露面

乘客欧先生拒不道歉,东航再发通报!此人已露面

平老师666
2026-10-08 17:56:07
皇马更衣室又爆内讧!两大球星动手,穆里尼奥也压不住姆巴佩?

皇马更衣室又爆内讧!两大球星动手,穆里尼奥也压不住姆巴佩?

余憁搞笑段子
2026-10-08 21:43:38
2026-10-09 13:12:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2223文章数 85关注度
往期回顾 全部

科技要闻

字节"干扰模型训练"实习生融资近2亿元

头条要闻

男子看房发现有十几个人急交10万定金 回家感觉不对劲

头条要闻

男子看房发现有十几个人急交10万定金 回家感觉不对劲

体育要闻

30天30队·鹈鹕:胖虎又一年“如果”

娱乐要闻

蔡康永回应,装都不装了!

财经要闻

日薪120元,我给机器人当“老师”

汽车要闻

不想改车又不想撞衫 来看看小鹏P7+的黑武士版

态度原创

健康
教育
数码
房产
家居

痘坑留下后,还能填平吗?

教育要闻

到2027年,将培育20个标杆!北京城乡学校共同体建设方案发布

数码要闻

宿舍多人共享实测,惠普战系列115nw激光打印机深度解析

房产要闻

你还在聊现房销售?我在海口已经在看交付现场!

家居要闻

2026建博会(广州) 公装联探展交流活动

无障碍浏览 进入关怀版