image_crop

Flutter 的图片裁剪插件。

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

image_cropping_idle

image_cropping_active

该插件提供了一个 `Crop` 小部件。该小部件仅渲染图像、覆盖层和用于裁剪图像的句柄。因此,它可以与其他小部件组合以构建自定义的图像裁剪体验。

该插件使用文件来避免通过方法通道传递大量数据。文件存储在 iOS 和 Android 的缓存文件夹中。因此,如果需要保存实际裁剪的图像,请确保将文件复制到其他位置。

所有计算密集型工作都通过 iOS 上的调度队列和 Android 上的缓存线程池在主线程之外完成。

注意:此插件仍在开发中,某些功能尚未提供,测试也仅限于此。

安装

image_crop 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,
);

GitHub

https://github.com/VolodymyrLykhonis/image_crop