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。水印文本默认添加在右下角。