我为这个问题搜索了很多天。
我想在flutter中实现像这样裁剪图片:
GIF来源:https://github.com/ArthurHub/Android-Image-Cropper
最接近此解决方案的库是Image库,该库提供操作图像和裁剪,但我希望像这个gif一样在UI层面上裁剪图像。我发现的所有库都没有提供此功能。
我为这个问题搜索了很多天。
我想在flutter中实现像这样裁剪图片:
GIF来源:https://github.com/ArthurHub/Android-Image-Cropper
最接近此解决方案的库是Image库,该库提供操作图像和裁剪,但我希望像这个gif一样在UI层面上裁剪图像。我发现的所有库都没有提供此功能。
没有一个小部件可以为您执行所有操作。但是,我相信现在可以原生地在flutter中编写它。我现在没有时间为您完成,但我绝对可以指出正确的方向。
RawImage
将其绘制,而不是直接使用 Image 小部件。crop
指示器-您可以通过直接在画布上绘制或可能使用 GestureDetector/Draggable/DropTarget 的某种组合来实现此目的。我建议从Canvas开始可能是最容易的。var byteData = await rootBundle.load("assets/image.jpg");
Uint8List lst = new Uint8List.view(byteData.buffer);
var codec = await UI.instantiateImageCodec(lst);
var nextFrame = await codec.getNextFrame();
var image = frameInfo.image;
在画布上显示图像:
将图像写入离屏画布:
ui.Image getCroppedImage(Image image, Rect src, Rect dst) {
var pictureRecorder = new ui.PictureRecorder();
Canvas canvas = new Canvas(pictureRecorder);
canvas.drawImageRect(image, src, dst, Paint());
return pictureRecorder.endRecording().toImage(dst.width.floor(), dst.height.floor());
}
你可能需要做类似于this answer的事情来获取鼠标/触摸手势的本地坐标。
一些建议-开始尽可能简单,不考虑性能(即如果需要,每次绘制所有内容等)。然后,一旦您掌握了基础知识,就可以开始考虑优化(即使用RawImage、Transform和Stack来处理图像,并仅重新绘制选择器等)。
如果您需要任何其他帮助,请在评论中让我知道,我会尽力回答。现在我已经写了一些关于这个问题的东西,它让我稍微有点好奇想要尝试实现它,但可能不会很快,因为我现在时间很少。祝你好运=D