跳到主要内容

快速开始

学习使用 libvips_ffi 处理你的第一张图片。

初始化 libvips

在使用任何 libvips 函数之前,必须初始化库:

import 'package:libvips_ffi/libvips_ffi.dart';

void main() {
// 初始化 libvips
VipsCore.init();

// 你的图像处理代码

// 完成后清理
VipsCore.shutdown();
}

基本图像处理

加载和保存

// 从文件加载
final pipeline = VipsPipeline.fromFile('input.jpg');

// 处理并保存为字节
final bytes = pipeline.toJpeg(quality: 85);

// 写入文件
File('output.jpg').writeAsBytesSync(bytes);

缩放

final result = VipsPipeline.fromFile('input.jpg')
.resize(width: 800) // 缩放到 800px 宽,保持宽高比
.toJpeg();

缩略图

// 创建 200x200 的智能裁剪缩略图
final result = VipsPipeline.fromFile('input.jpg')
.thumbnail(width: 200, height: 200, crop: VipsCrop.attention)
.toJpeg();

应用效果

final result = VipsPipeline.fromFile('input.jpg')
.gaussianBlur(sigma: 2.0) // 模糊
.sharpen() // 锐化
.grayscale() // 转换为灰度
.toJpeg();

链式操作

Pipeline API 支持方法链式调用进行复杂变换:

final result = VipsPipeline.fromFile('input.jpg')
.autoRotate() // 修复 EXIF 方向
.resize(width: 1920) // 缩放到 1920px 宽
.crop(x: 100, y: 100, width: 800, height: 600) // 裁剪区域
.rotate(angle: 45) // 旋转 45 度
.brightness(factor: 1.2) // 增加亮度
.contrast(factor: 1.1) // 增加对比度
.gaussianBlur(sigma: 0.5) // 轻微模糊
.toWebp(quality: 90); // 导出为 WebP

异步处理

在 Flutter 应用中,使用 VipsPipelineCompute 在 isolate 中处理图像:

import 'package:libvips_ffi/libvips_ffi.dart';

Future<Uint8List> processImage(String inputPath) async {
return await VipsPipelineCompute.run(
PipelineSpec.fromFile(inputPath)
.resize(width: 800)
.toJpeg(quality: 85),
);
}

下一步