Python 图像处理之PIL库详解用法

Python 图像处理之PIL库详解用法

PIL库简介

Python Imaging Library(PIL)是Python的第三方模块,用于图像处理相关的应用。

安装PIL库

PIL版本更新较慢,建议直接安装Pillow,Pillow是PIL的一个分支项目,它基本保留了PIL的所有功能,并在此基础上提供了一些新的功能以及增强。

可以通过pip安装Pillow:

pip install Pillow

PIL库常用函数

打开和保存图像

打开图像

Image.open(fp, mode='r'):打开图像文件,返回一个图像对象。参数fp指定文件或文件的路径,参数mode可以指定打开模式,默认为'r',只读模式。

from PIL import Image

image = Image.open('/path/to/image.jpg')

保存图像

Image.save(fp, format=None, **params):将图像保存到文件或文件流中。参数fp指定文件名和路径,参数format指定文件格式,可以是JPEG、PNG、GIF等格式。另外,还可以使用关键字参数params指定保存参数,比如图片质量等。

from PIL import Image

image = Image.open('/path/to/image.jpg')
image.save('/path/to/save.jpg', format='JPEG', quality=90)

图像缩放、裁剪和旋转

图像缩放

Image.thumbnail(size, resample=3):等比例缩放图像。参数size指定缩放后的大小,resample参数指定重采样算法,默认为3(BICUBIC),建议使用默认值。

from PIL import Image

image = Image.opne('/path/to/image.jpg')
image.thumbnail((300, 300)) # 等比例缩放到300*300像素
image.save('/path/to/thumbnail.jpg', format='JPEG', quality=90)

图像裁剪

Image.crop(box=None):裁剪指定区域的图像,参数box为指定区域的左上角坐标和右下角坐标的元组,格式为(left, up, right, bottom),左上角的坐标为(0, 0)

from PIL import Image

image = Image.open('/path/to/image.jpg')
box = (100, 100, 400, 400) # 左上角坐标为(100, 100),右下角坐标为(400, 400)
image_crop = image.crop(box)
image_crop.save('/path/to/crop.jpg', format='JPEG', quality=90)

图像旋转

Image.rotate(angle, resample=3):旋转图像。参数angle为角度值,表示顺时针旋转的角度,可以是正数或负数。resample参数为重采样算法,默认为3(BICUBIC),建议使用默认值。

from PIL import Image

image = Image.open('/path/to/image.jpg')
image_rotate = image.rotate(45) # 顺时针旋转45度
image_rotate.save('/path/to/rotate.jpg', format='JPEG', quality=90)

示例说明

示例1:批量转换图片格式

from PIL import Image
import os

def batch_convert(from_format, to_format, input_dir, output_dir):
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)

    for file_name in os.listdir(input_dir):
        if file_name.endswith(from_format):
            file_path = os.path.join(input_dir, file_name)
            output_path = os.path.join(output_dir, file_name[:-4] + to_format)
            image = Image.open(file_path)
            image.save(output_path, format=to_format, quality=90)


if __name__ == '__main__':
    batch_convert('.png', '.jpg', '/path/to/input/dir', '/path/to/output/dir')

该示例功能为批量将指定目录下的所有png格式的图片转为jpg格式的图片。

示例2:图片水印

from PIL import Image, ImageDraw, ImageFont

def add_watermark(image_path, text, font_path, font_size):
    image = Image.open(image_path)
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype(font_path, font_size)
    text_width, text_height = draw.textsize(text, font)
    text_x = image.width - text_width
    text_y = image.height - text_height
    draw.text((text_x, text_y), text, font=font, fill=(255, 255, 255, 255)) # 在右下角添加白色文本
    image.save(image_path[:-4] + '_watermark.jpg', format='JPEG', quality=90)


if __name__ == '__main__':
    add_watermark('/path/to/image.jpg', 'test', '/path/to/font.ttf', 30)

该示例给指定的图片添加文本水印,使用的字体文件为.ttf格式,字体大小为30。水印文本默认添加在右下角。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 图像处理之PIL库详解用法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python字符串格式化的方法(两种)

    Python字符串格式化是指在字符串中插入变量或者数据时,通过特定的语法规则进行格式化输出的过程。Python提供了两种字符串格式化的方法,分别是%运算符格式化和format方法格式化。 1. %运算符格式化 %运算符格式化的语法是,在字符串中使用%作为占位符,然后在字符串后面跟上%运算符,再跟上需要格式化输出的变量或者数据。%运算符的占位符有以下几种: %…

    python 2023年6月5日
    00
  • python3中os.path模块下常用的用法总结【推荐】

    下面我来详细讲解一下Python3中os.path模块下常用的用法总结。 1. 简介 os.path模块是Python内置模块之一,可以方便地处理文件路径、文件名等信息。该模块提供了一些常用的函数,用来操作文件和目录的路径。 2. 常用函数 2.1 isabs() isabs()函数用于判断是否是绝对路径。示例代码如下: import os path = ‘…

    python 2023年6月2日
    00
  • 手把手教你使用Python解决简单的zip文件解压密码

    下面就手把手教你使用Python解决简单的zip文件解压密码的完整攻略: 1. 安装Python库 解析zip文件需要使用zipfile库,因此需要先安装该库,可以通过在终端输入以下命令来完成安装: pip install zipfile 2. 加载zip文件 使用Python打开zip文件需要使用zipfile.open()函数,该函数的参数需要传入zip…

    python 2023年6月3日
    00
  • python利用xlsxwriter模块 操作 Excel

    下面来详细讲解Python利用xlsxwriter模块操作Excel的完整实例教程。 1. 准备工作 使用xlsxwriter模块前,需要先进行安装。可以通过以下命令来安装: pip install xlsxwriter 安装完毕后,可以开始使用该模块进行Excel操作。 2. 创建Excel文件 使用xlsxwriter模块创建Excel文件的过程包含以下…

    python 2023年5月13日
    00
  • 利用Docker 运行 python 简单程序

    下面是利用Docker运行Python简单程序的完整攻略,包含两个示例说明: 1. 准备工作 首先,需要在本地或者服务器上安装Docker。安装方法可以参考Docker官方文档。 2. 创建Docker镜像 我们需要在Docker中创建一个镜像来运行Python程序。可以选择从Docker Hub下载一个现成的Python镜像,也可以自己制作一个。这里我们选…

    python 2023年5月23日
    00
  • Python中列表与元组的乘法操作示例

    下面是Python中列表与元组的乘法操作示例的完整攻略。 列表与元组的乘法操作 列表和元组在Python中都支持乘法操作(重复操作)。这个操作会重复列表或元组中的元素,产生一个新的列表或元组。 列表的乘法操作示例 下面是一个列表乘法操作的示例: fruits = [‘apple’, ‘banana’, ‘orange’] print(fruits * 3) …

    python 2023年5月13日
    00
  • 详解Python 2.6 升级至 Python 2.7 的实践心得

    详解Python 2.6 升级至 Python 2.7 的实践心得 背景介绍 随着Python 2.6版本的退出发布周期,Python开发者逐渐意识到Python 2.6版本中存在许多巨大的限制条件,其中最主要的限制条件之一就是Python 2.7版本对新特性和语言功能的支持更加全面。 因此,在Python开发者都十分看好Python 2.7版本的同时,升级…

    python 2023年6月3日
    00
  • Python使用random.shuffle()随机打乱字典排序

    让我来详细讲解一下“Python使用random.shuffle()随机打乱字典排序”的完整攻略。 1. random.shuffle() 函数 首先,我们需要了解一下 Python 中的 random.shuffle() 函数。它可以用来打乱一个列表(list)中的元素顺序。列表是 Python 中比较常用的数据结构之一,可以存储多个元素,因此可以用来存储…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部