Pillow 安装使用教程

一、Pillow 简介

Pillow 是 Python 图像处理库 PIL(Python Imaging Library)的友好分支,是图像处理的事实标准。它支持打开、编辑、转换、保存多种图像格式,常用于图像批量处理、验证码识别、缩略图生成等应用场景。


二、安装 Pillow

2.1 使用 pip 安装(推荐)

pip install Pillow

2.2 验证安装

import PIL
print(PIL.__version__)

若无报错且输出版本号,则说明安装成功。


三、基本使用示例

3.1 打开图像

from PIL import Imageimg = Image.open("example.jpg")
img.show()

3.2 图像信息

print(img.format)      # 图像格式(JPEG、PNG 等)
print(img.size)        # 图像尺寸
print(img.mode)        # 颜色模式(RGB、L 等)

3.3 图像保存

img.save("output.png")

四、常见图像操作

4.1 缩放与裁剪

resized = img.resize((200, 200))
cropped = img.crop((100, 100, 300, 300))  # 左、上、右、下

4.2 旋转与翻转

rotated = img.rotate(45)           # 顺时针旋转 45°
flipped = img.transpose(Image.FLIP_LEFT_RIGHT)  # 左右翻转

4.3 转换颜色模式

gray = img.convert("L")    # 转为灰度图
rgba = img.convert("RGBA") # 转为带透明通道的图像

五、绘图与文字处理

from PIL import ImageDraw, ImageFontdraw = ImageDraw.Draw(img)
draw.rectangle((50, 50, 150, 150), outline="red")
draw.text((60, 60), "Hello", fill="blue")

使用自定义字体:

font = ImageFont.truetype("arial.ttf", 24)
draw.text((10, 10), "你好", font=font, fill="black")

六、图像滤镜与增强

from PIL import ImageFilterblurred = img.filter(ImageFilter.BLUR)
contour = img.filter(ImageFilter.CONTOUR)

七、批量图像处理

import osfor filename in os.listdir("images"):if filename.endswith(".jpg"):img = Image.open(f"images/{filename}")img.thumbnail((300, 300))img.save(f"thumbnails/{filename}")

八、常见问题

Q1: 报错 OSError: cannot open resource

字体文件路径不正确,使用绝对路径或将字体文件放入项目目录中。

Q2: 中文无法显示?

需要使用支持中文的字体,如 simhei.ttfmsyh.ttf,并加载为 ImageFont.truetype()


九、学习资源推荐

  • Pillow 官方文档
  • 菜鸟教程 Pillow 教程
  • Pillow 示例合集 GitHub

本文由“小奇Java面试”原创发布,转载请注明出处。

可以搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server从入门到项目实践(超值版)读书笔记 20

9.4 数据的嵌套查询所谓嵌套查询,就是在一个查询语句中,嵌套进另一个查询语句,即,查询语句中可以使用另一个查询语句中得到的查询结果,子查询可以基于一张表或者多张表。子查询中常用的操作符有ANY、SOME、ALL、IN、EX…

【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案

【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案 问题1:序列值不自动刷新问题 下面SQL只针对单库操作以及每个序列只绑定一张表的情况 -- 自动生成的序列,设置序列值 with sequences as (select *from (select table_schema,table_…

【Maven】Maven命令大全手册:28个核心指令使用场景

Maven命令大全手册:28个核心指令使用场景 Maven命令大全手册:28个核心指令深度解析一、构建生命周期核心命令1. mvn clean2. mvn compile3. mvn test4. mvn package5. mvn install6. mvn deploy二、依赖管理命令7. mvn dependency:tree8. mvn dependency…

大语言模型(LLM)按架构分类

大语言模型(LLM)按架构分类的深度解析 1. 仅编码器架构(Encoder-Only) 原理 双向注意力机制:通过Transformer编码器同时捕捉上下文所有位置的依赖关系# 伪代码示例:BERT的MLM任务 masked_input "Th…

MySQL(120)如何进行数据脱敏?

数据脱敏(Data Masking)是指通过某种方式对敏感数据进行变形,使其在使用过程中无法识别原始数据,从而保护数据隐私。数据脱敏通常应用在开发、测试和数据分析等场景中。下面我们详细介绍如何在Java应用程序中进行数据脱敏&#xf…

使用 Dockerfile 构建基于 .NET9 的跨平台基础镜像

官方基础镜像准备 微软官方 dotnet sdk 基础镜像: docker pull mcr.microsoft.com/dotnet/sdk:9.0拉取 ubuntu 镜像: docker pull ubuntu:24.04更多资源请参考: dotnet sdk images,https://mcr.microsoft.com/en-us/artifact/mar/…

C++ : 线程库

C : 线程库一、线程thread1.1 thread类1.1.1 thread对象构造函数1.1.2 thread类的成员函数1.1.3 线程函数的参数问题1.2 this_thread 命名空间域1.2.1 chrono二、mutex互斥量库2.1 mutex的四种类型2.1.1 mutex 互斥锁2.2.2 timed_mutex 时间锁2.2.3 recursive_muetx 递归锁2.2.…

idea的使用小技巧,个人向

idea的使用小技巧,个人向 一、前言二、过程1、显示内存的使用情况2、去掉xml文件中的黄色背景3、显示所有打开文件4、显示工具栏到菜单下面5、使用JDK8 一、前言 每次重装idea都需要重新设置一下,这里做个记录。 这些技巧只是个人感觉的好用 演示用的…

debian及衍生发行版apt包管理常见操作

好的,这是 Debian 及其衍生版(如 Ubuntu)使用的 apt 包管理器的常用命令速查表。 一点说明:apt 是新一代的命令行工具,整合了 apt-get 和 apt-cache 的常用功能,并提供了更友好的交互体验。本表主要使用现…

vue调用函数

好的,我们来讲解如何在 Vue 模板中调用函数。您提供的代码是一个非常棒的、很实用的例子。 在 Vue 模板中,你可以在两个主要地方调用函数: 文本插值中:像 {{ formatDate(date) }} 这样,函数的返回值会作为文本被渲染到…

前端常用构建工具介绍及对比

打包构建工具是现代软件开发中必不可少的,它们帮助开发者自动化构建、打包、部署等流程,提升开发效率。不过,不同时期构建工具略有差异。 每个构建工具都有其擅长的领域,我们需要知道其优势,才能在我们实际开发中选择合适的构建工具进行构建处理。 1. Gulp Gulp 是一个…

Web后端开发-SpringBootWeb入门、Http协议、Tomcat

文章目录Web后端开发简介SpringBootWeb入门HTTP协议HTTP-概述HTTP-请求协议HTTP-响应协议HTTP-协议解析Web服务器-Tomcat简介基本使用SpringBootWeb入门程序解析Web后端开发简介 SpringBootWeb入门 package com.wuxuan.javaweb_wushuang.controller;import org.springframework…

物联网通信技术全景剖析:从LoRa到5G的深度对比与选型指南

物联网通信技术全景剖析:从LoRa到5G的深度对比与选型指南在万物互联时代,选择合适的通信技术如同为设备构建“神经网络”。本文将深入解析七大主流物联网通信技术,助您在技术选型中精准决策。一、低功耗广域网(LPWAN)技…

俄罗斯方块AI深度解析:从算法原理到实现细节

俄罗斯方块AI深度解析:从算法原理到实现细节 前言 俄罗斯方块,这个诞生于1984年的经典游戏,至今仍然是人工智能研究领域的热门课题。当简单的几何形状在网格中不断下落时,看似简单的规则背后却隐藏着复杂的策略决策问题。本文将深入剖析一个基于Python实现的俄罗斯方块AI…

Spring Boot 框架创建一个简单的后端接口,并介绍如何使用 Apifox 连接该接口

目录 一、配置 二、使用 IntelliJ IDEA 创建 Spring Boot 项目 1.打开 IntelliJ IDEA,选择 File > New > Project 2.在左侧面板选择 Spring Initializr,项目名称设置为HelloWorldAPI 3.点击 Create 完成项目创建 三、创建控制器类 四、运行项…

CICD[导航]、docker+gitlab+harbor+jenkins从安装到部署

一、安装 CICD[软件安装]:docker安装gitlab-CSDN博客 CICD[软件安装]:ubuntu安装jenkins-CSDN博客 CICD[软件安装]:ubuntu安装私有镜像仓库-Harbor-CSDN博客 CICD[软件安装]:ubuntu24安装Docker-CSDN博客 二、镜像执行 CICD[…

深度学习图像分类数据集—蘑菇识别分类

该数据集为图像分类数据集,适用于ResNet、VGG等卷积神经网络,SENet、CBAM等注意力机制相关算法,Vision Transformer等Transformer相关算法。 数据集信息介绍:蘑菇识别分类:[Agaricus, Amanita, Boletus, Cortinarius, …

iOS 多线程导致接口乱序?抓包还原 + 请求调度优化实战

在一次性能优化过程中,我们将 iOS App 内多处请求改为并行处理,以提高页面加载速度。但上线后却收到部分用户反馈:进入页面后数据加载错乱,有时展示前一次页面内容,有时同一个接口请求重复返回不同内容。 日志仅显示正…

PDFBox 在 Linux 报 “No glyph for U+535A (博)” —— 一次子集化踩坑与完整排查清单

PDFBox 在 Linux 报 “No glyph for U535A (博)” —— 一次子集化踩坑与完整排查清单关键词:PDFBox、PDType0Font、子集嵌入(subset embedding)、SimHei、思源黑体、字体回退1. 背景业务场景 后端使用 Apache PDFBox 填充含 AcroForm 的中文…

网安系列【8】之暴力破解入门

文章目录 引用资料一 什么是暴力破解?二 暴力破解的工作原理三 暴力破解的类型3.1 传统暴力破解3.2 字典攻击3.3 混合攻击3.4 彩虹表攻击 四 暴力破解实战演示4.1 环境和工具4.2 破解操作 五 防御暴力破解的策略六 暴力破解的相关法律七 延伸学习总结 引用资料 Bur…