python | pyvips,一个神奇的 Python 库
本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。
原文链接:pyvips,一个神奇的 Python 库!
大家好,今天为大家分享一个神奇的 Python 库 - pyvips。
Github地址:https://github.com/libvips/pyvips
在图像处理领域,高效和快速的图像处理工具对于开发者来说至关重要。pyvips
是一个强大的 Python 库,基于 libvips
图像处理库,提供高效、快速且节省内存的图像处理能力。pyvips
支持多种图像格式,并且能够执行各种复杂的图像处理任务,如裁剪、缩放、旋转、滤波等。本文将详细介绍 pyvips
库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。
1 安装
要使用 pyvips
库,首先需要安装它。可以通过 pip 工具方便地进行安装。
以下是安装步骤:
pip install pyvips
安装完成后,可以通过导入 pyvips
库来验证是否安装成功:
import pyvips
print("pyvips 库安装成功!")
2 特性
-
高效性:基于
libvips
,比其他图像处理库(如 PIL、OpenCV)更快且更节省内存。 -
多格式支持:支持多种图像格式,如 JPEG、PNG、TIFF、GIF 等。
-
丰富的图像处理功能:提供多种图像处理操作,如裁剪、缩放、旋转、滤波等。
-
管道操作:支持管道操作,便于处理大图像或批量图像。
-
易于扩展:提供简洁的 API,支持自定义扩展。
3 基本功能
3.1 加载和保存图像
使用 pyvips
,可以方便地加载和保存图像。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 保存图像
image.write_to_file('output.jpg')
3.2 图像裁剪
pyvips
提供了图像裁剪功能。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 裁剪图像
cropped_image = image.crop(100, 100, 200, 200)# 保存裁剪后的图像
cropped_image.write_to_file('cropped_output.jpg')
3.3 图像缩放
pyvips
支持图像缩放。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 缩放图像
scaled_image = image.resize(0.5)# 保存缩放后的图像
scaled_image.write_to_file('scaled_output.jpg')
3.4 图像旋转
pyvips
支持图像旋转。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 旋转图像
rotated_image = image.rot(90)# 保存旋转后的图像
rotated_image.write_to_file('rotated_output.jpg')
4 高级功能
4.1 图像滤波
pyvips
支持多种图像滤波操作。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 应用高斯滤波
filtered_image = image.gaussblur(5)# 保存滤波后的图像
filtered_image.write_to_file('filtered_output.jpg')
4.2 管道操作
pyvips
支持管道操作,可以方便地处理大图像或批量图像。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 应用一系列操作
processed_image = image.crop(100, 100, 300, 300).resize(0.5).gaussblur(3)# 保存处理后的图像
processed_image.write_to_file('processed_output.jpg')
4.3 图像合并
pyvips
支持图像合并操作。
import pyvips# 加载图像
image1 = pyvips.Image.new_from_file('example1.jpg')
image2 = pyvips.Image.new_from_file('example2.jpg')# 水平合并图像
merged_image = image1.join(image2, 'horizontal')# 保存合并后的图像
merged_image.write_to_file('merged_output.jpg')
5 实际应用场景
5.1 网站图像处理
在网站开发中,通过 pyvips
对上传的图像进行裁剪、缩放和优化,以提高网站加载速度和用户体验。
import pyvips# 加载上传的图像
image = pyvips.Image.new_from_file('upload.jpg')# 裁剪图像
cropped_image = image.crop(0, 0, 800, 800)# 缩放图像
scaled_image = cropped_image.resize(0.5)# 保存处理后的图像
scaled_image.write_to_file('optimized_output.jpg')
5.2 批量图像处理
在批量图像处理任务中,通过 pyvips
高效地处理大量图像,如缩放、旋转和滤波。
import os
import pyvips# 定义图像处理函数
def process_image(input_path, output_path):image = pyvips.Image.new_from_file(input_path)processed_image = image.resize(0.5).gaussblur(2)processed_image.write_to_file(output_path)# 批量处理图像
input_dir = 'input_images'
output_dir = 'output_images'
for filename in os.listdir(input_dir):if filename.endswith('.jpg'):input_path = os.path.join(input_dir, filename)output_path = os.path.join(output_dir, filename)process_image(input_path, output_path)
5.3 图像分析
在图像分析任务中,通过 pyvips
提取图像特征并进行分析,如直方图分析、颜色统计等。
import pyvips# 加载图像
image = pyvips.Image.new_from_file('example.jpg')# 计算图像直方图
histogram = image.hist_find()# 显示直方图信息
print(histogram)
6 总结
pyvips
库是一个功能强大且易于使用的图像处理工具,能够帮助开发者在 Python 项目中高效地进行图像处理。通过支持多格式图像、多种图像处理操作、管道操作和高效的内存管理,pyvips
能够满足各种复杂的图像处理需求。本文详细介绍了 pyvips
库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握 pyvips
库的使用,并在实际项目中发挥其优势。
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。
相关文章:
python | pyvips,一个神奇的 Python 库
本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:pyvips,一个神奇的 Python 库! 大家好,今天为大家分享一个神奇的 Python 库 - pyvips。 Github地址:https…...

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁
在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同…...
深入Laravel事件系统:创建与使用事件的指南
Laravel的事件系统是一种强大的机制,它允许你将应用程序的行为封装成事件,然后在适当的时候触发这些事件。这不仅有助于代码的解耦,还提高了应用程序的可维护性和可扩展性。本文将详细介绍如何在Laravel中创建和使用事件,包括事件…...

element-ui操作表格行内容如何获取当前行索引?
需求: 根据每个用户的提交次数、撤回次数,动态计算出实际次数,并且提交次数不能小于撤回次数 <template><div><el-table:data"tableData"style"width: 80%"border><el-table-columnprop"date&…...

代发考生战报:南京考场华为售前HCSP H19-411考试通过
代发考生战报:南京考场华为售前HCSP H19-411考试通过,客服给的题库非常稳定,考试遇到2个新题,剩下全是题库里的原题,想考的放心考吧,考场服务挺好,管理员带着做签名和一些考试说明介绍清楚&…...

【Spring Boot】Spring原理:Bean的作用域和生命周期
目录 Spring原理一. 知识回顾1.1 回顾Spring IOC1.2 回顾Spring DI1.3 回顾如何获取对象 二. Bean的作用域三. Bean的生命周期 Spring原理 一. 知识回顾 在之前IOC/DI的学习中我们也用到了Bean对象,现在先来回顾一下IOC/DI的知识吧! 首先Spring IOC&am…...

MinIO:开源对象存储解决方案的领先者
MinIO:开源对象存储解决方案的领先者 MinIO 是一款开源的对象存储系统,致力于提供高性能、可伸缩、安全的数据存储解决方案。 官方解释:MinIO 是一个基于Apache License v2。0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适…...

15、电科院FTU检测标准学习笔记-基本性能
作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…...

古建筑倾斜在线监测系统:科技守护历史的创新实践
在文化遗产保护的广阔领域中,古建筑的健康监测占据着举足轻重的地位。然而,传统的监测方法往往受限于布线复杂、安装难度大以及对古建筑本体可能造成的伤害等问题。近年来,一种新型的古建筑倾斜在线监测系统应运而生,它…...

DP(2) | Java | LeetCode 62, 63, 343, 96 做题总结(96 未完)
62.不同路径 我的代码(报错) 写的过程中感到很迷惑的点:①二维数组和这道题目的对应弄不清除,m n的初始化 是 dp[m][n] 还是 dp[n][m] ② class Solution {public int uniquePaths(int m, int n) {int[][]dp new int[m1][n1];d…...
Ubuntu实战续篇:Apache httpd轻松搭建高效代理服务器
Ubuntu实战续篇:Apache httpd轻松搭建高效代理服务器 一、前言二、Ubuntu下的Apache配置文件概览三、配置并启用 Apache 代理服务 作者:高玉涵 时间:2024.7.11 21:06 博客:blog.csdn.net/cg_i 环境:Ubuntu 22.04.4 LTS…...

Linux 程序卡死的特殊处理
一、前言 Linux环境。 我们在日常编写的程序中,可能会出现一些细节问题,导致程序卡死,即程序没法正常运行,界面卡住,也不会闪退... 当这种问题出现在客户现场,那就是大问题了。。。 当我们暂时还无法排…...
(C++字符串02) 反转字符串中的单词
151、反转字符串中的单词 先将字符串的里的多余空格去掉,时间复杂度:O(n),再将字符串整体反转,时间复杂度:O(n),最后反转每一个单词,时间复杂度:O(n); class Solution { public:string reverseWords(stri…...

一致性Hash问题及解决方案
Hash算法的应用场景 请求的负载均衡 Nginx的ip_hash策略可以在客户端ip不发生变化的情况下,将其发出的请求始终路由到同一个目标服务器上,实现会话粘滞,避免处理session共享问题。 如果没有ip_hash策略,可以通过维护一张映射表的…...

【接口设计】如何设计统一 RESTful 风格的数据接口
如何设计统一 RESTful 风格的数据接口 1.版本控制1.1 通过 URL1.2 通过自定义请求头1.3 通过 Accept 标头 2.过滤信息3.确定 HTTP 的方法4.确定 HTTP 的返回状态5.定义统一返回的格式 近年来,随着移动互联网的发展,各种类型的客户端层出不穷。如果不统一…...

【备战秋招】——算法题目训练和总结day3
【备战秋招】——算法题目训练和总结day3😎 前言🙌BC149简写单词题解思路分析代码分享: dd爱框框题解思路分析代码分享: 除2!题解思路分析代码分享: 总结撒花💞 😎博客昵称ÿ…...

Git 操作总结
1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载:打开 https://git-scm.com/download/win,选择相应版本即可。 Git 安装完成后,可以在开始菜单中看到 Git 的三个启动图标(Git Bash、Git CMD、Git GUI&…...

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)
参考文章,非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word(一) 效果图 审核时,输入框高亮敏感词ÿ…...

33 IRF配置思路
IRF配置思路网络括谱图 主 Ten-GigabitEthernet 1/0/49 Ten-GigabitEthernet 1/0/50 Ten-GigabitEthernet 1/0/51 备 Ten-GigabitEthernet 2/0/49 Ten-GigabitEthernet 2/0/50 Ten-GigabitEthernet 2/0/51 思路 主 1 利用console线进入设备的命令行页面去更改…...

Dify中的RAG和知识库
一.RAG 基本架构 当用户提问 “美国总统是谁?” 时,系统并不是将问题直接交给大模型来回答,而是先将用户问题在知识库中进行向量搜索,通过语义相似度匹配的方式查询到相关的内容(拜登是美国现任第46届总统…࿰…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...