随着移动设备的普及,越来越多的应用需要在移动设备上实现条码扫描功能。这不仅包括浏览器,如Safari、Firefox、Opera、Chrome,也包括用于构建原生应用的WebView UI组件。对于熟悉Web编程的开发者来说,创建优秀的Android和iOS移动应用变得轻而易举。
动态视觉条码阅读器SDK为Windows提供了.NET API。可以在服务器端(IIS)实现条码阅读模块,并使用HTML5检测从任何移动设备捕获的条码图像。
一维条码:Code 39, Code 93, Code 128, Codabar, Interleaved 2 of 5, EAN-8, EAN-13, UPC-A, UPC-E, Industrial 2 of 5
二维条码:QRCode, DataMatrix, PDF417
BMP, JPEG, PNG, GIF, TIFF, PDF
Windows, IIS
要在HTML5中访问移动设备的摄像头,只需要一行代码:
<input type="file" name="fileToUpload" id="fileToUpload" style="display: none;" accept="image/*" />
点击“抓取图像”,原生相机应用将被带到前端。拍照后返回,可以按照以下方式获取图像数据:
var file = e.target.files[0], imageType = /image.*/;
if (!file.type.match(imageType)) {
alert('The uploaded file is not supported.');
return;
}
btnGrab.disabled = true;
btnRead.disabled = true;
loadImage(e.target.files[0], function (img) {
$("#divBorder").empty();
$("#divBorder").attr('min-height', '1px');
document.getElementById('divBorder').appendChild(img);
btnGrab.disabled = false;
btnRead.disabled = false;
});
将图像数据转换为Base64字符串:
function scanBarcode() {
var base64 = orgCanvas.toDataURL('image/jpeg', 0.7);
var data = base64.replace(/^data:image\/(png|jpeg|jpg);base64,/, "");
var imgData = JSON.stringify({
Base64Data: data,
BarcodeType: getBarcodeFormat().toString(),
MultiBarcodes: document.getElementById('chkMultiBarcodes').checked
});
readBarcodeRequest(imgData);
}
使用XMLHttpRequest将JSON数据发送到Web服务器:
function readBarcodeRequest(data) {
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.upload.addEventListener('progress', uploadProgress, false);
xhr.open("POST", "MobilecamBarcodeReader.ashx");
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(data);
}
使用StreamReader获取流数据:
context.Request.InputStream.Position = 0;
string jsonString;
using (var inputStream = new StreamReader(context.Request.InputStream)) {
jsonString = inputStream.ReadToEnd();
}
将字符串转换为JSON对象:
var postData = JsonConvert.DeserializeObject<PostData>(@jsonString);
if (postData == null) return;
var iMaxNumbers = postData.MultiBarcodes ? 100 : 1;
指定有效的许可证以使检测API工作:
public static BarcodeResult[] GetBarcode(string strImgBase64, Int64 format, int iMaxNumbers) {
var reader = new Dynamsoft.Barcode.BarcodeReader();
var options = new ReaderOptions {
MaxBarcodesToReadPerPage = iMaxNumbers,
BarcodeFormats = (BarcodeFormat) format
};
reader.ReaderOptions = options;
reader.LicenseKeys = "";
return reader.DecodeBase64String(strImgBase64);
}