image_crop
Flutter 的图片裁剪插件。
一个用于在 iOS 和 Android 上裁剪图片的 Flutter 插件。


该插件提供了一个 `Crop` 小部件。该小部件仅渲染图像、覆盖层和用于裁剪图像的句柄。因此,它可以与其他小部件组合以构建自定义的图像裁剪体验。
该插件使用文件来避免通过方法通道传递大量数据。文件存储在 iOS 和 Android 的缓存文件夹中。因此,如果需要保存实际裁剪的图像,请确保将文件复制到其他位置。
所有计算密集型工作都通过 iOS 上的调度队列和 Android 上的缓存线程池在主线程之外完成。
注意:此插件仍在开发中,某些功能尚未提供,测试也仅限于此。
安装
将 image_crop 添加为
pubspec.yaml 中的依赖项。
使用方法
创建从小部件加载和编辑图像
final cropKey = GlobalKey<CropState>();
Widget _buildCropImage() {
return Container(
color: Colors.black,
padding: const EdgeInsets.all(20.0),
child: Crop(
key: cropKey,
image: Image.file(imageFile),
aspectRatio: 4.0 / 3.0,
),
);
}
访问裁剪值
- scale 是裁剪图像时按比例缩放图像宽度和高度的因子。`1.0` 表示无需缩放。
- area 是一个矩形,指示要从中裁剪图像的分数位置。
final crop = cropKey.currentState;
// or
// final crop = Crop.of(context);
final scale = crop.scale;
final area = crop.area;
if (area == null) {
// cannot crop, widget is not setup
// ...
}
访问和处理图像。作为一个方便的功能来请求访问照片的权限。
final permissionsGranted = await ImageCrop.requestPermissions();
读取图像选项,例如:宽度和高度。这是一个有效的实现,它不会解码或将实际图像加载到内存中。
final options = await getImageOptions(file: file);
debugPrint('image width: ${options.width}, height: ${options.height}');
如果图像太大而无法加载到内存中,则有一个采样函数,它依赖于原生平台在将图像加载到内存之前按比例缩小图像。例如,重新采样图像以使其尺寸接近 `1024x4096`。如果它是正方形,则可以使用 `preferredSize` 来指定宽度和高度。
final sampleFile = await ImageCrop.sampleImage(
file: originalFile,
preferredWidth: 1024,
preferredHeight: 4096,
);
一旦 `Crop` 小部件准备就绪,就可以通过原生支持进行裁剪和缩放图像。
final croppedFile = await ImageCrop.cropImage(
file: originalFile,
scale: crop.scale,
area: crop.area,
);