crop_your_image
一个 Flutter 插件,提供 Crop Widget 用于裁剪图像。
crop_your_image 只提供决定图片内裁剪区域的最小 UI。其他 UI 部分,例如“裁剪”按钮或“更改纵横比”按钮,需要由各应用开发者自行准备。
此策略有助于应用程序开发者以他们自己品牌的设计来构建“裁剪页面”。为了控制裁剪图像的操作,您可以使用 CropController,无论您使用何种 Widgets。

笔记
请注意,此包正在开发中(甚至尚未达到 alpha 版本)。它没有足够的功能,相当有错误,而且不那么舒适。
基本思想如上所述。我将非常感谢您提出想法或建议以实现它。
用法
将Crop小部件放置在您想要放置图像裁剪UI的任何位置。
Widget build(BuildContext context) {
return Crop(
image: _imageData,
aspectRatio: 4 / 3,
initialSize: 0.5,
withCircleUi: false,
onCropped: (image) {
// do something with image data
}
);
}
每个属性的用法如下所列。
image是UInt8List类型的图像数据,裁剪结果可以通过onCropped回调获得。aspectRatio是裁剪区域的纵横比。如果想以任意纵横比裁剪图像,请设置为null或省略。aspectRatio可以通过CropController.aspectRatio的setter动态更改(如下所示)。initialSize是裁剪区域的初始大小。1.0(或默认的null)适合图片的大小,这意味着裁剪区域尽可能地延伸。0.5将是它的一半。当通过CropController.aspectRatio更改aspectRatio时,也会参考此值。withCircleUi标志用于决定裁剪 UI 的形状。如果为true,则aspectRatio会自动设置为1.0,并且裁剪 UI 的形状将是圆形。请注意,此标志不会影响裁剪图像的结果。如果您想要裁剪为圆形的图像,请调用CropController.cropCircle而不是CropController.crop。
如果您想通过自己设计的 Widgets 进行控制,请创建一个 CropController 实例并将其传递给 Crop 的 controller 属性。
final _controller = CropController();
Widget build(BuildContext context) {
return Crop(
image: _imageData,
onCropped: (image) {
// do something with image data
}
controller: _controller,
);
}
您可以通过调用 _controller.crop() 来裁剪图像。
ElevatedButton(
child: Text('Crop it!')
onPressed: _cropController.crop,
),
因为 _controller.crop() 仅触发裁剪过程,所以此方法会立即返回,而没有任何裁剪后的图像数据。您始终可以通过 Crop Widget 的 onCropped 回调来获取裁剪图像的结果。