众所周知,大部分二维码(比方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;
  }
}