image_to_svg 0.0.1
image_to_svg: ^0.0.1 copied to clipboard
A Rust FFI plugin to convert image to SVG.
image_to_svg #
Rust 图片转 SVG 的 Flutter 插件,基于 flutter_rust_bridge 将像素图(PNG/JPG 等)转换为可缩放的 SVG 矢量图。适合像素风图标、简化矢量化预览等场景。
- 核心能力:将位图转换为 SVG 字符路径,支持硬边缘渲染与透明度阈值
- 跨平台:Android / iOS / macOS / Windows / Linux(使用 FRB 自动打包原生库)
- 依赖要求:需要安装 Rust 开发环境
示例代码与完整用法请参考示例应用与公开 API。
安装要求 #
- Rust(必须):使用 rustup 安装稳定工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default stable
- Flutter SDK
- 平台依赖
- Android:Android SDK + NDK(Gradle 会自动拉取并构建)
- iOS/macOS:Xcode(通过 CocoaPods 集成)
- Windows/Linux:CMake(由 Flutter 构建系统驱动)
快速开始 #
- 初始化 FRB
import 'package:image_to_svg/image_to_svg.dart';
Future<void> main() async {
await RustLib.init();
// ...
}
- 调用转换 API(Dart)
import 'dart:io';
import 'package:image_to_svg/image_to_svg.dart';
import 'package:path_provider/path_provider.dart';
Future<String> convertToSvg(File input) async {
final bytes = await input.readAsBytes();
final dir = await getTemporaryDirectory();
final out = '${dir.path}/converted_${DateTime.now().millisecondsSinceEpoch}.svg';
final resultPath = await convertPixelsToSvgFile(
imageBytes: bytes,
outputPath: out,
options: FlutterConversionOptions(
scale: 1,
alphaThreshold: 1,
crispEdges: true,
autoResize: true,
),
);
return resultPath; // 返回生成的 SVG 文件路径
}
- 在界面中展示(示例工程已集成
flutter_svg)
示例应用代码参考:main.dart
API 说明(Dart) #
-
函数:
convertPixelsToSvgFile({ required List<int> imageBytes, required String outputPath, FlutterConversionOptions? options }) -> Future<String>- 入参:
imageBytes:输入图片的字节(PNG/JPG 等)outputPath:输出 SVG 文件路径options:可选配置
- 返回:生成的 SVG 文件路径(String)
- 入参:
-
FlutterConversionOptionsscale:输出 SVG 的缩放倍数(整数)alphaThreshold:透明度阈值(0–255),低于该值视为透明crispEdges:是否启用硬边缘渲染,避免抗锯齿导致颜色泛化autoResize:是否自动缩小过大的图片(内部使用最近邻缩放,最大边默认 256)
API 源码参考:
- Dart 封装:image_to_svg.dart
- Rust 实现:image_to_svg.rs
使用建议 #
- 大尺寸位图(如 4000×3000)在矢量化时会产生巨量路径与颜色块,SVG 体积和渲染复杂度会急剧上升。默认开启
autoResize,将图片最大边缩到 256,并使用最近邻缩放以保留像素硬边。 - 适合场景:像素风图标、简化渲染的矢量预览、低分辨率图形的矢量化。
示例应用 #
- 位置:
example/ - 主要逻辑:图片选择、参数调整(scale/alphaThreshold)、SVG 预览
- 入口示例:main.dart
平台构建与集成说明 #
该插件通过 Flutter 的构建系统与 flutter_rust_bridge 自动编译并打包原生库:
- Android:Gradle + NDK(配置见项目
android/) - iOS/macOS:CocoaPods(见 image_to_svg.podspec 与 macOS podspec)
- Windows/Linux:CMake(见 linux/CMakeLists.txt 与 windows/CMakeLists.txt)
默认配置由 FRB 生成代码管理,入口位于:
- frb_generated.dart
许可 #
本项目遵循开源许可证,详见 LICENSE。