libvips/libvips
A fast image processing library with low memory needs.
libvips:图像处理库
它是什么
libvips 是一个用于处理图像的库——调整大小、裁剪、过滤、格式转换以及许多其他操作。其关键设计特点是需求驱动和水平线程化:它只执行你实际要求的工作,并将工作分配到多个 CPU 线程。README 声称这使得它比类似库更快、内存效率更高。
它是开源的,采用 LGPL-2.1-or-later 许可证。
它能做什么
- 约 300 种操作,涵盖算术、直方图、卷积、形态学操作、频率滤波、颜色、重采样、统计等。
- 广泛的数值范围:从 8 位整数到 128 位复数。
- 每张图像任意数量的波段(例如,灰度、RGB、RGBA 或更多)。
- 多种图像格式:JPEG、JPEG 2000、JPEG XL、TIFF、PNG、WebP、HEIC、AVIF、FITS、Matlab、OpenEXR、PDF、SVG、HDR、PPM/PGM/PFM、CSV、GIF、Analyze、NIfTI、DeepZoom 和 OpenSlide。它还可以通过 ImageMagick 或 GraphicsMagick 加载图像,从而扩展对 DICOM 等格式的支持。
语言绑定
它内置了 C、C++ 和命令行界面的绑定。完整的社区绑定包括:
- Ruby (ruby-vips)
- Python (pyvips)
- PHP (php-vips)
- C# / .NET (NetVips)
- Go (vips-gen)
- Lua (lua-vips)
- Crystal (crystal-vips)
- Elixir (vix)
- Java (vips-ffm)
- Nim (libvips-nim)
- Rust (vips-rs)
谁在使用它
使用 libvips 作为图像处理引擎的知名项目:
- Mastodon(社交网络)
- sharp(Node.js 图像库)
- imgproxy
- wsrv.nl
- bimg
- Ruby on Rails(Active Storage)
- CarrierWave
- MediaWiki
libvips 的官方 GUI 是 nip4,被描述为“电子表格和照片编辑器的奇怪组合”。
安装
- 类 Unix 系统(包括 macOS):可通过大多数包管理器获取软件包。
- Windows:在项目的 GitHub 发布中提供预构建二进制文件。
- 详细的安装说明在 libvips 网站上。
从源码构建
要求:
- Meson 构建系统(版本 0.56 或更高)
- Meson 的后端:ninja、Visual Studio 或 XCode
- 核心依赖:
build-essential、pkg-config、libglib2.0-dev、libexpat1-dev
基本构建步骤:
cd libvips-x.y.z
meson setup build --prefix /my/install/prefix
cd build
meson compile
meson test
meson install
你可以使用诸如 -Dnsgif=false 或 -Dmagick=disabled 之类的标志切换功能和依赖(参见 meson_options.txt)。安装后,可以使用 pytest 运行更全面的测试套件。
可选依赖
libvips 会自动启用它在系统上找到的库的支持。关键依赖包括:
- libjpeg(或 mozjpeg / libjpeg-turbo)— JPEG
- libultrahdr — UltraHDR 图像
- libexif — JPEG 中的 EXIF 元数据
- librsvg — SVG 加载(回退到 ImageMagick)
- libraw — 相机 RAW 加载(回退到 ImageMagick)
- PDFium 或 poppler-glib — PDF 加载(回退到 ImageMagick)
- cgif — GIF 保存(回退到 ImageMagick)
- libarchive — 通过
dzsave创建图像金字塔 - libtiff — TIFF
- fftw3 — 傅里叶变换
- lcms2 — ICC 配置文件操作
- libpng — PNG(回退到 spng)
- libimagequant 或 quantizr — 8 位调色板 PNG/GIF 写入
- ImageMagick 或 GraphicsMagick — 广泛的格式支持(README 警告启用此功能对不受信任的图像有安全影响)
- pangocairo — 文本渲染
- highway — SIMD 加速(回退到 orc-0.4)
- matio — Matlab 文件
- cfitsio — FITS 图像
- libwebp — WebP
- libniftiio — NIfTI 图像
- OpenEXR — 读取 OpenEXR(不支持写入)
- OpenJPEG — JPEG 2000
- libjxl — JPEG XL
- OpenSlide — 虚拟幻灯片格式(Aperio、Hamamatsu、Leica、MIRAX、Sakura、Trestle、Ventana)
- libheif — HEIC 和 AVIF(需要 libheif 使用适当的编解码器构建)
总结
libvips 是一个成熟、广泛采用的图像处理库,通过需求驱动、线程化执行优先考虑速度和低内存使用。它支持大量格式和操作,提供大多数主要语言的绑定,并被知名项目用于生产环境。通过包管理器安装很容易,使用 Meson 从源码构建也很简单。
相关
- 项目
- 项目
- 项目
- 项目