pythonpillow库怎么安装 PythonPillow库详解文档 pyth
目录
- Python Pillow 库详解文档
- 简介
- 安装
- 核心模块架构
- Image 模块 &8211; 核心图像处理
- 基本导入和使用
- 图像创建与打开
- 图像基本属性和信息
- 图像变换操作
- 图像模式转换
- ImageDraw 模块 &8211; 图形绘制
- 基础绘制操作
- 文本绘制
- 高质量绘制功能
- ImageFilter 模块 &8211; 图像滤镜
- 内置滤镜
- 自定义卷积滤镜
- ImageEnhance 模块 &8211; 图像增强
- ImageOps 模块 &8211; 图像操作
- ImageColor 模块 &8211; 颜色处理
- ImageFont 模块 &8211; 字体处理
- 实际应用示例
- 图像批处理
- 水印添加
- 图像格式转换
- 创建图像拼贴
- 性能优化建议
- 错误处理和调试
Python Pillow 库详解文档
简介
Pillow (PIL Fork) 是 Python 中最流行的图像处理库,它是 Python Imaging Library (PIL) 的现代分支和继承者。Pillow 提供了广泛的图像处理功能,支持多种图像格式的读取、处理、保存和显示。
安装
pip install Pillow
核心模块架构
Pillow 库的核心围绕Image
类构建,同时提供了多个专门的子模块来处理不同的图像处理任务。主要的模块包括图像基础操作、滤镜处理、颜色管理、字体渲染、图像增强等功能模块。
Image 模块 &8211; 核心图像处理
基本导入和使用
from PIL import Image, ImageDraw, ImageFontimport os
图像创建与打开
创建新图像
创建空白图像img = Image.new(‘RGB’, (800, 600), color=’white’)img = Image.new(‘RGBA’, (400, 300), color=(255, 0, 0, 128)) 创建渐变图像img = Image.new(‘L’, (256, 256))for x in range(256): for y in range(256): img.putpixel((x, y), x)
打开现有图像
打开图像文件img = Image.open(‘example.jpg’)img = Image.open(‘path/to/image.png’) 验证图像try: img.verify() print(“图像文件有效”)except: print(“图像文件损坏”)
图像基本属性和信息
获取图像基本信息print(f”尺寸: img.size}”) (width, height)print(f”模式: img.mode}”) RGB, RGBA, L, P 等print(f”格式: img.format}”) JPEG, PNG, GIF 等print(f”调色板: img.palette}”) 获取图像统计信息extrema = img.getextrema() 最小值和最大值histogram = img.histogram() 直方图数据
图像变换操作
尺寸调整
调整图像大致resized = img.resize((400, 300)) 指定尺寸resized = img.resize((400, 300), Image.LANCZOS) 指定重采样算法 按比例缩放width, height = img.sizenew_img = img.resize((width//2, height//2)) 创建缩略图img.thumbnail((128, 128)) 保持宽高比
旋转和翻转
旋转图像rotated = img.rotate(45) 顺时针旋转45度rotated = img.rotate(90, expand=True) 扩展画布适应旋转 翻转图像flipped_h = img.transpose(Image.FLIP_LEFT_RIGHT) 水平翻转flipped_v = img.transpose(Image.FLIP_TOP_BOTTOM) 垂直翻转rotated_90 = img.transpose(Image.ROTATE_90) 90度旋转
裁剪操作
矩形裁剪box = (100, 100, 400, 300) (left, top, right, bottom)cropped = img.crop(box) 智能裁剪到内容边界bbox = img.getbbox()if bbox: trimmed = img.crop(bbox)
图像模式转换
模式转换gray_img = img.convert(‘L’) 转为灰度rgba_img = img.convert(‘RGBA’) 添加透明通道rgb_img = img.convert(‘RGB’) 移除透明通道 带抖动的转换palette_img = img.convert(‘P’, dither=Image.FLOYDSTEINBERG)
ImageDraw 模块 &8211; 图形绘制
ImageDraw 模块提供了在图像上绘制各种图形和文本的功能。
基础绘制操作
from PIL import Image, ImageDraw 创建绘制对象img = Image.new(‘RGB’, (400, 300), ‘white’)draw = ImageDraw.Draw(img) 绘制基本形状draw.rectangle([50, 50, 150, 100], fill=’red’, outline=’black’, width=2)draw.ellipse([200, 50, 350, 150], fill=’blue’, outline=’navy’)draw.line([0, 0, 400, 300], fill=’green’, width=3) 绘制多边形points = [(100, 200), (150, 250), (200, 200), (175, 150), (125, 150)]draw.polygon(points, fill=’yellow’, outline=’orange’)
文本绘制
基础文本绘制draw.text((50, 200), “Hello World”, fill=’black’) 使用自定义字体try: font = ImageFont.truetype(“arial.ttf”, 24) draw.text((50, 250), “Custom Font”, font=font, fill=’blue’)except: 使用默认字体 font = ImageFont.load_default() draw.text((50, 250), “Default Font”, font=font, fill=’blue’) 获取文本尺寸text = “Measure me”bbox = draw.textbbox((0, 0), text, font=font)width = bbox[2] – bbox[0]height = bbox[3] – bbox[1]
高质量绘制功能
绘制圆弧draw.arc([100, 100, 200, 200], start=0, end=180, fill=’red’, width=3) 绘制扇形draw.pieslice([250, 100, 350, 200], start=0, end=90, fill=’green’) 绘制多条线段points = [(0, 150), (100, 100), (200, 150), (300, 100), (400, 150)]draw.line(points, fill=’purple’, width=2)
ImageFilter 模块 &8211; 图像滤镜
ImageFilter 模块提供了各种图像滤镜效果。
内置滤镜
from PIL import Image, ImageFilterimg = Image.open(‘example.jpg’) 模糊滤镜blurred = img.filter(ImageFilter.BLUR)gaussian_blur = img.filter(ImageFilter.GaussianBlur(radius=2)) 锐化滤镜sharpened = img.filter(ImageFilter.SHARPEN)unsharp_mask = img.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)) 边缘检测edges = img.filter(ImageFilter.FIND_EDGES)edge_enhance = img.filter(ImageFilter.EDGE_ENHANCE) 浮雕效果embossed = img.filter(ImageFilter.EMBOSS) 轮廓检测contour = img.filter(ImageFilter.CONTOUR)
自定义卷积滤镜
创建自定义滤镜内核from PIL.ImageFilter import Kernel 3×3 拉普拉斯算子laplacian_kernel = Kernel((3, 3), [ -1, -1, -1, -1, 8, -1, -1, -1, -1]) 应用自定义滤镜filtered_img = img.filter(laplacian_kernel) 5×5 高斯模糊核gaussian_5x5 = Kernel((5, 5), [ 1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 6, 24, 36, 24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1], scale=256)
ImageEnhance 模块 &8211; 图像增强
ImageEnhance 模块提供了调整图像亮度、对比度、饱和度和锐度的功能。
from PIL import Image, ImageEnhanceimg = Image.open(‘example.jpg’) 亮度调整brightness = ImageEnhance.Brightness(img)bright_img = brightness.enhance(1.5) 增加50%亮度dark_img = brightness.enhance(0.5) 减少50%亮度 对比度调整contrast = ImageEnhance.Contrast(img)high_contrast = contrast.enhance(2.0) 增强对比度low_contrast = contrast.enhance(0.5) 降低对比度 颜色饱和度调整color = ImageEnhance.Color(img)saturated = color.enhance(1.8) 增强饱和度desaturated = color.enhance(0.2) 降低饱和度(接近灰度) 锐度调整sharpness = ImageEnhance.Sharpness(img)sharp_img = sharpness.enhance(2.0) 增强锐度soft_img = sharpness.enhance(0.5) 降低锐度
ImageOps 模块 &8211; 图像操作
ImageOps 模块提供了许多实用的图像操作函数。
from PIL import Image, ImageOpsimg = Image.open(‘example.jpg’) 自动对比度autocontrast_img = ImageOps.autocontrast(img) 颜色均衡equalized_img = ImageOps.equalize(img) 反转颜色inverted_img = ImageOps.invert(img) 灰度化grayscale_img = ImageOps.grayscale(img) 镜像翻转mirrored_img = ImageOps.mirror(img) 适应尺寸(保持宽高比)fitted_img = ImageOps.fit(img, (300, 300), method=Image.LANCZOS) 添加边框bordered_img = ImageOps.expand(img, border=20, fill=’black’) 色调分离posterized_img = ImageOps.posterize(img, bits=4) 曝光度调整solarized_img = ImageOps.solarize(img, threshold=128)
ImageColor 模块 &8211; 颜色处理
ImageColor 模块提供了颜色格式转换和颜色名称解析功能。
from PIL import ImageColor 颜色名称转RGBred_rgb = ImageColor.getrgb(‘red’) (255, 0, 0)blue_rgb = ImageColor.getrgb(‘0000FF’) (0, 0, 255) 转换为RGBAred_rgba = ImageColor.getcolor(‘red’, ‘RGBA’) (255, 0, 0, 255) HSL转RGBhsl_color = ImageColor.getcolor(‘hsl(120, 100%, 50%)’, ‘RGB’) (0, 255, 0) 支持的颜色格式formats = [ ‘red’, 颜色名称 ‘FF0000’, 十六进制 ‘rgb(255, 0, 0)’, RGB函数 ‘rgba(255, 0, 0, 1.0)’, RGBA函数 ‘hsl(0, 100%, 50%)’, HSL函数]
ImageFont 模块 &8211; 字体处理
ImageFont 模块用于加载和使用字体文件。
from PIL import Image, ImageDraw, ImageFont 加载TrueType字体try: font_large = ImageFont.truetype(“arial.ttf”, 36) font_small = ImageFont.truetype(“arial.ttf”, 16)except: 使用默认字体 font_large = ImageFont.load_default() font_small = ImageFont.load_default() 使用字体绘制文本img = Image.new(‘RGB’, (400, 200), ‘white’)draw = ImageDraw.Draw(img)draw.text((10, 10), “Large Text”, font=font_large, fill=’black’)draw.text((10, 60), “Small Text”, font=font_small, fill=’gray’) 获取字体指标ascent, descent = font_large.getmetrics()text_size = font_large.getsize(“Sample Text”)
实际应用示例
图像批处理
import osfrom PIL import Imagedef batch_resize(input_dir, output_dir, size=(800, 600)): “””批量调整图像尺寸””” if not os.path.exists(output_dir): os.makedirs(output_dir) for filename in os.listdir(input_dir): if filename.lower().endswith((‘.jpg’, ‘.jpeg’, ‘.png’, ‘.bmp’)): input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) try: with Image.open(input_path) as img: img.thumbnail(size, Image.LANCZOS) img.save(output_path, optimize=True, quality=85) print(f”处理完成: filename}”) except Exception as e: print(f”处理失败 filename}: e}”)
水印添加
def add_watermark(image_path, watermark_text, output_path): “””为图像添加文字水印””” with Image.open(image_path) as img: 创建透明层 overlay = Image.new(‘RGBA’, img.size, (255, 255, 255, 0)) draw = ImageDraw.Draw(overlay) 设置字体和位置 try: font = ImageFont.truetype(“arial.ttf”, 36) except: font = ImageFont.load_default() 计算文本位置(右下角) text_bbox = draw.textbbox((0, 0), watermark_text, font=font) text_width = text_bbox[2] – text_bbox[0] text_height = text_bbox[3] – text_bbox[1] x = img.width – text_width – 20 y = img.height – text_height – 20 绘制半透明文字 draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128)) 合并图层 watermarked = Image.alpha_composite(img.convert(‘RGBA’), overlay) watermarked.convert(‘RGB’).save(output_path, quality=95)
图像格式转换
def convert_format(input_path, output_path, output_format=’JPEG’): “””转换图像格式””” with Image.open(input_path) as img: 如果目标格式不支持透明度,转换为RGB if output_format in [‘JPEG’, ‘BMP’] and img.mode in [‘RGBA’, ‘LA’]: background = Image.new(‘RGB’, img.size, (255, 255, 255)) background.paste(img, mask=img.split()[-1] if img.mode == ‘RGBA’ else None) img = background img.save(output_path, format=output_format, quality=95)
创建图像拼贴
def create_collage(image_paths, output_path, cols=3, spacing=10): “””创建图像拼贴””” images = [] for path in image_paths: img = Image.open(path) img.thumbnail((200, 200), Image.LANCZOS) images.append(img) 计算拼贴尺寸 rows = (len(images) + cols – 1) // cols max_width = max(img.width for img in images) max_height = max(img.height for img in images) total_width = cols max_width + (cols – 1) spacing total_height = rows max_height + (rows – 1) spacing 创建拼贴画布 collage = Image.new(‘RGB’, (total_width, total_height), ‘white’) 粘贴图像 for i, img in enumerate(images): row = i // cols col = i % cols x = col (max_width + spacing) y = row (max_height + spacing) collage.paste(img, (x, y)) collage.save(output_path, quality=95)
性能优化建议
使用 Pillow 进行图像处理时,应该注意内存管理和性能优化。对于大图像处理,建议使用with
语句确保及时释放资源,选择合适的重采样算法以平衡质量和速度。批处理时可以考虑多线程处理以进步效率,同时注意设置合适的图像质量参数以控制输出文件大致。
对于需要处理大量图像的应用,可以考虑结合 NumPy 进行数值计算,或使用 Pillow-SIMD 等优化版本来获得更好的性能表现。在 Web 应用中使用时,应该注意设置合理的图像尺寸限制和格式检查,以防止恶意文件攻击。
错误处理和调试
在实际应用中,应该对图像操作进行适当的错误处理,检查文件存在性、格式支持性和内存限制等难题。Pillow 提供了详细的异常信息,可以帮助快速定位和难题解决。建议在生产环境中添加日志记录,以便追踪图像处理的执行情况和性能指标。
到此这篇关于Python Pillow 库详解文档的文章就介绍到这了,更多相关Python Pillow 库内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
无论兄弟们可能感兴趣的文章:
- Python的图像处理库Pillow安装与使用教程
- Python图像处理Pillow库的安装使用
- Python详细讲解图像处理的而两种库OpenCV和Pillow
- Python的Pillow库进行图像文件处理(图文详解)
- Python 图像处理 Pillow 库详情
- python图片处理库Pillow实现简单PS功能
- Python Pillow(PIL)库的用法详解