Skip to content

High-performance cross-platform image processing for Dart/Flutter via libvips FFI. 基于 libvips 的 Dart / Flutter 高性能跨平台图片处理 FFI 库。

License

Notifications You must be signed in to change notification settings

fluttercandies/libvips_ffi

Repository files navigation

libvips_ffi

Flutter/Dart FFI bindings for libvips - a fast, multi-threaded image processing library.

中文文档

Features

  • Image loading/saving (JPEG, PNG, WebP, TIFF, GIF, etc.)
  • Image transformations (resize, rotate, crop, flip)
  • Image filters (blur, sharpen, invert, gamma)
  • Color space conversions
  • Smart crop and gravity
  • High performance with multi-threading support

Package Architecture

┌─────────────────────────────────────────────────────────────────┐ │ Your Application │ ├─────────────────────────────────────────────────────────────────┤ │ Flutter Mobile │ Flutter Desktop │ Pure Dart Desktop │ │ (Android/iOS) │ (macOS/Win/Linux) │ (CLI/Server) │ ├────────────────────┼────────────────────┼───────────────────────┤ │ libvips_ffi │ libvips_ffi │ libvips_ffi_core │ │ (includes native) │ + platform pkg │ + loader choice │ └────────────────────┴────────────────────┴───────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ libvips_ffi_macos libvips_ffi_windows libvips_ffi_linux (pre-compiled) (pre-compiled) (pre-compiled) │ ▼ libvips_ffi_core (Pure Dart FFI) 

Packages

This project uses melos for multi-package management.

Core Package

Package Description
libvips_ffi_core Pure Dart FFI bindings (no Flutter dependency)

Platform Packages

Package Description
libvips_ffi Flutter mobile (Android/iOS) with bundled native libraries
libvips_ffi_macos Pre-compiled libvips for macOS (arm64 + x86_64)
libvips_ffi_windows Pre-compiled libvips for Windows (x64)
libvips_ffi_linux Pre-compiled libvips for Linux (x64)
libvips_ffi_desktop Desktop meta package (auto-selects platform)

Utility Packages

Package Description
libvips_ffi_system Load from system package manager (Homebrew, apt, etc.)
libvips_ffi_loader Dynamic library downloader with callback support

Quick Start by Platform

Flutter Mobile (Android/iOS) - Recommended

Pre-compiled native libraries are bundled automatically.

dependencies: libvips_ffi: ^0.0.1
import 'package:libvips_ffi/libvips_ffi.dart'; void main() { initVips(); // Sync API with VipsPipeline (fluent chainable) final pipeline = VipsPipeline.fromFile('input.jpg'); pipeline.resize(0.5); pipeline.toFile('output.jpg'); pipeline.dispose(); // Async API (recommended for Flutter UI) final result = await VipsCompute.resizeFile('input.jpg', 0.5); // result.data contains processed image bytes shutdownVips(); }

Flutter Desktop (macOS/Windows/Linux) - Recommended

Use libvips_ffi with platform-specific packages for bundled libraries.

dependencies: libvips_ffi: ^0.0.1 libvips_ffi_macos: ^0.1.0 # macOS # libvips_ffi_windows: ^0.1.0 # Windows # libvips_ffi_linux: ^0.1.0 # Linux
import 'package:libvips_ffi/libvips_ffi.dart'; void main() { initVips(); // Auto-detects platform and loads bundled library // Same API as mobile final result = await VipsCompute.resizeFile('input.jpg', 0.5); shutdownVips(); }

Pure Dart Desktop (CLI/Server)

For non-Flutter Dart applications.

Option 1: Use system-installed libvips

dependencies: libvips_ffi_core: ^0.1.0
import 'package:libvips_ffi_core/libvips_ffi_core.dart'; void main() { // Requires: brew install vips (macOS) or apt install libvips-dev (Linux) initVipsSystem(); final pipeline = VipsPipeline.fromFile('input.jpg'); pipeline.resize(0.5); pipeline.toFile('output.jpg'); pipeline.dispose(); shutdownVips(); }

Option 2: Use pre-compiled libraries

dependencies: libvips_ffi_desktop: ^0.1.0
import 'package:libvips_ffi_desktop/libvips_ffi_desktop.dart'; void main() { initVipsDesktop(); // Auto-selects platform // ... shutdownVips(); }

Choosing the Right Package

Scenario Recommended Package(s)
Flutter mobile app libvips_ffi
Flutter desktop app libvips_ffi + libvips_ffi_<platform>
Dart CLI tool (system libvips) libvips_ffi_core
Dart CLI tool (bundled libvips) libvips_ffi_desktop
Custom library loading libvips_ffi_core + libvips_ffi_loader

Sync vs Async API

API Use Case Blocks UI?
VipsPipeline (sync) Simple scripts, CLI tools Yes
VipsPipelineCompute (async) Flutter apps, UI-heavy apps No (runs in isolate)
// Sync - blocks until complete final pipeline = VipsPipeline.fromFile('input.jpg'); pipeline.resize(0.5).blur(2.0); pipeline.toFile('output.jpg'); pipeline.dispose(); // Async - runs in background isolate final result = await VipsPipelineCompute.processFile( 'input.jpg', (p) => p.resize(0.5).blur(2.0), );

Version Numbering

  • Packages with pre-compiled binaries: x.y.z+libvips_version
    • Example: 0.1.0+8.16.0 means package version 0.1.0 with libvips 8.16.0
  • Pure Dart packages: x.y.z

Requirements

  • Dart SDK >= 3.5.0
  • Flutter >= 3.0.0 (for Flutter packages)

Development

# Install melos dart pub global activate melos # Bootstrap all packages melos bootstrap # Run analysis melos analyze # Run tests melos test

License

LGPL-2.1 - see LICENSE for details.

Links

About

High-performance cross-platform image processing for Dart/Flutter via libvips FFI. 基于 libvips 的 Dart / Flutter 高性能跨平台图片处理 FFI 库。

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published