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日

相关文章

  • Python3爬虫学习之将爬取的信息保存到本地的方法详解

    Python3爬虫学习之将爬取的信息保存到本地的方法详解 在进行网页数据的爬取时,我们常常需要将爬取到的信息保存到本地文件中。本文将详细讲解在Python3中,如何将爬取到的数据保存到本地文件中的几种方法。 方法一:使用open函数 Python3可以使用内置的open函数打开/创建文件,并且通过write方法将获取到的数据写入文件中。下面是一个示例代码: …

    python 2023年5月14日
    00
  • python操作小程序云数据库实现简单的增删改查功能

    要实现Python操作小程序云数据库实现简单的增删改查功能,需要以下步骤: 1. 登录小程序云开发控制台 首先要打开小程序云开发控制台,在云开发控制台中创建一个新的小程序数据库。 2. 创建集合 在数据库中创建一个集合,集合就类似于关系数据库中的表,每个文档就类似于表中的一行记录。可以为集合设置索引,以便在查询时提高检索效率。 3. 创建Python云开发环…

    python 2023年5月14日
    00
  • python查看zip包中文件及大小的方法

    当您有一个zip文件时,您可能会想要查看其内部文件以及它们的大小。Python提供了方便的方法来实现这一目标。以下是完整的攻略: 步骤1:导入模块 在执行任何操作之前,您需要导入ZipFile模块。您可以像这样导入ZipFile: import zipfile 步骤2:打开zip文件并获取其内容 使用ZipFile模块,您可以打开zip文件并获取其内容。例如…

    python 2023年6月3日
    00
  • python表格存取的方法

    Python有多种处理表格数据的方法,比如使用pandas库、使用标准库 csv、使用第三方库xlrd / xlwt等。以下将分别说明这些方法实现表格存取和操作的具体步骤以及示例说明。 使用pandas库存取Excel表格 第一步:安装pandas库 pip install pandas 第二步:读取Excel表格数据 import pandas as pd…

    python 2023年5月13日
    00
  • 解决python3中解压zip文件是文件名乱码的问题

    下面是详细讲解“解决python3中解压zip文件是文件名乱码的问题”的完整攻略。 问题描述 在Python3中解压zip文件时,有时会遇到文件名乱码的问题。这是因为Python3采用的是Unicode编码,而zip文件中的文件名可能不是Unicode编码,因此出现了乱码。 解决方案 解决这个问题的方法是在解压之前,重新编码文件名,使其转换为Unicode编…

    python 2023年5月20日
    00
  • python实现单例的两种方法解读

    当我们需要在程序中创建一个对象,并且要保证该对象在整个程序中只有一个实例时,就需要使用单例模式。在Python中,可以通过多种方法实现单例模式。本篇攻略将详细讲解Python实现单例的两种方法。 方法一:装饰器实现单例 在Python中,装饰器通常用于修饰函数或类,以增强它们的功能。我们可以使用装饰器修饰一个类,以使该类成为单例。其具体实现代码如下: def…

    python 2023年5月19日
    00
  • 浅谈python爬虫使用Selenium模拟浏览器行为

    浅谈Python爬虫使用Selenium模拟浏览器行为 在本攻略中,我们将介绍如何使用Python爬虫使用Selenium模拟浏览器行为。我们将使用Python的Selenium库来实现这个过程。 步骤1:安装Selenium库 使用以下命令可以安装Selenium库: pip install selenium 步骤2:安装浏览器驱动 使用Selenium库…

    python 2023年5月15日
    00
  • Python 如何定义匿名或内联函数

    下面是Python如何定义匿名或内联函数的完整攻略。 1. 什么是匿名函数 Python中的匿名函数也称为Lambda函数,是一种没有名称的函数,通常用在函数需要作为参数传递给其他函数的场合中。Lambda函数是一种临时构建的小型函数,它可以接受任意多个参数并返回一个表达式计算的结果。 2. 如何定义匿名函数 Python中定义Lambda函数的语法非常简洁…

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