Flutter 中如何扫描黑底白块的二维码
众所周知,大部分二维码(比如QR和DM)标准规定二维码应该以白色为背景色,黑色为前景色......好吧,其实我不知道,所以今天程序无法扫描黑底白块的二维码时,我觉得非常奇怪。
开发 Flutter 应用时,如果要扫描二维码,可以使用华为的huawei_scan库,它可以扫描各种格式的二维码,包括日常使用的QR码和工业常用的DM码。这个库可以应对很复杂的情况,比如模糊、远距离、反光等,但是对于黑底白块二维码,识别率很低。猜测,这个库考虑到这个问题了,但是对于这种情况的考虑处于低优先级,所以识别率低,识别速度慢。
为了提高识别速度,可以考虑把图片反相,即把二维码中黑色变白色,白色变黑色,再传给库进行识别。反相操作用image库可以完成。
示例代码如下:
import 'package:huawei_scan/huawei_scan.dart';
import 'package:image/image.dart'
String? scan(XFile picture){
var data = decodeImage(await picture.readAsBytes());
if (data != null) {
data = invert(data); // 反相
DecodeRequest request = DecodeRequest(data: Uint8List.fromList(image.encodeJpg(data)), scanType: widget.type ?? HmsScanTypes.AllScanType);
var res = await HmsScanUtils.decodeWithBitmap(request);
return res.originalValue;
}
}
转载自:https://juejin.cn/post/7239628066024259644