Flutter优质功能集成插件cream_of_the_crop的使用
Flutter优质功能集成插件Cream Of The Crop 的使用
Cream Of The Crop
快速的Flutter Web图像裁剪和调整大小处理。
特性:
- 裁剪
- 调整大小
- 获取图像尺寸
为什么?
这个包的存在是为了在Web上提供一个高性能的选项来执行图像调整大小和裁剪转换。由于Dart的特性,纯Dart编写的图像转换器在Web上运行较慢。详情可以查看image包中的性能警告。
如何工作?
在几乎所有现代Web浏览器中,cream_of_the_crop
可以利用GPU加速的HTML <canvas>
元素来进行调整大小和裁剪操作。
演示
在示例文件夹中启动应用程序,以查看 <canvas>
和纯Dart之间的性能差异。
没有用户界面
该包没有用户界面。它设计用于与crop_image 或其他不处理自身图像转换的裁剪库一起使用。crop_image
提供了裁剪图像的用户界面,并生成该包可以使用的裁剪值来转换图像数据。
iOS / Android?
此包仅适用于Web。确保只在Web上调用其函数。其他平台会抛出未实现错误。
对于iOS和Android设备,image 包更为高效,并且可以为这些平台提供良好的用户体验。考虑检查一下flutter_native_image。
裁剪指令
裁剪命令需要几个变量。请参阅Mozilla开发者文档了解它们的含义。
import 'package:cream_of_the_crop/cream_of_the_crop.dart';
final _creamOfTheCropPlugin = CreamOfTheCrop();
Uint8List? crop() async {
return await _creamOfTheCropPlugin.cropImage(
imageBytes,
sx, sy, // 相对于原始图像左上角的裁剪位置
sw, sh, // 剩余区域的宽度和高度
dx, dy, // 目标画布上的相对位置(目前几乎总是 0,0,因为不支持创建比所需图像更大的画布)
dw, dh, // 最终图像的宽度和高度
quality,
imageExportType,
);
}
为了计算这些值,可能有助于使用 dart:ui
包中的 Image()
对象来获取原始图像的宽度和高度。以下示例展示了如何使用 imagePicker
。
import 'package:image_picker/image_picker.dart';
import 'dart:ui' as ui;
final ImagePicker imagePicker = ImagePicker();
void getImage() async {
// 使用图库选择图像
final XFile? image = await imagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
// 将图像读取为字节
Uint8List bytes = await image.readAsBytes();
// 解码图像
ui.Image decoded = await decodeImageFromList(bytes);
print("图像宽度: ${decoded.width}, 高度: ${decoded.height}");
}
}
crop_image 示例
在示例文件夹中的flutter项目中,可以看到裁剪覆盖对话框的实现,返回裁剪值以供 cream_of_the_crop
使用。
给定一个X x Y尺寸的原始图像,裁剪为500 x 500正方形。
// 使用dart:ui解码原始图像的尺寸
int decodedWidth = decoded.width; // X
int decodedHeight = decoded.height; // Y
// 所需最终图像的像素大小
int exportWidth = 500;
int exportHeight = 500;
// 由crop_image包裁剪UI提供的值
double cropTop = finalCropPixels.top;
double cropRight = finalCropPixels.right;
double cropBottom = finalCropPixels.bottom;
double cropLeft = finalCropPixels.left;
// 边缘距离
int distTop = cropTop.toInt();
int distRight = (decodedWidth - cropRight).toInt();
int distLeft = cropLeft.toInt();
int distBottom = (decodedHeight - cropBottom).toInt();
// 计算裁剪值以创建裁剪后的图像数据
int sx = distLeft;
int sy = distTop;
int sw = decodedWidth - distLeft - distRight;
int sh = decodedHeight - distTop - distBottom;
int dx = 0;
int dy = 0;
int dw = exportWidth;
int dh = exportHeight;
更多关于Flutter优质功能集成插件cream_of_the_crop的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html