在 JavaScript 中将原始图像的十六进制字符串转换为位图图像 [英] Converting a hex string of a raw image to a bitmap image in JavaScript
本文介绍了在 JavaScript 中将原始图像的十六进制字符串转换为位图图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
简介:
我正在从智能卡读取指纹图像数据,正如您所知,这些数据在智能卡中保存为原始图像.我正在开发一个客户端程序,该程序仅使用 java 脚本从读卡器的扫描仪读取图像并将其显示在客户端页面中.
现在我的问题:
如何将原始数据的十六进制字符串转换为使用位图图像的适当标头完成的十六进制字符串?请注意,我的图像有 width
和 height
.
尝试过的方法:
我已经通过 从原始数据中获取缓冲图像.另外,我可以通过 Hex2Base64 然后我可以通过 base64AsImage 在图像标签中显示 base64 字符串.然而,当且仅当十六进制包含标题,而我们的数据是原始数据时,这些函数才能正常工作.
我的代码(仅适用于包含标题的十六进制字符串):
<head lang="en"><meta charset="UTF-8"><title></title><脚本>如果(!window.atob){var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var table = tableStr.split("");window.atob = 函数(base64){if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character");base64 = base64.replace(/=/g, "");var n = base64.length &3;if (n === 1) throw new Error("字符串包含无效字符");for (var i = 0, j = 0, len = base64.length/4, bin = []; i < len; ++i) {var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A");var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A");if ((a | b | c | d) <0) throw new Error("String contains an invalid character");bin[bin.length] = ((a <<2) | (b >> 4)) &255;bin[bin.length] = ((b <<4) | (c >> 2)) &255;bin[bin.length] = ((c <<6) | d) &255;};返回 String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4);};window.btoa = 函数(bin){for (var i = 0, j = 0, len = bin.length/3, base64 = []; i < len; ++i) {var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++);if ((a | b | c) > 255) throw new Error("String contains an invalid character");base64[base64.length] = table[a >>2] + 表[((a << 4) & 63) |(b > > 4)] +(isNaN(b) ? "=": table[((b <<2) & 63) | (c >> 6)]) +(isNaN(b + c) ? "=" : table[c & 63]);}返回 base64.join("");};}函数 hexToBase64(str) {返回 btoa(String.fromCharCode.apply(null,str.replace(/
|
/g, "").replace(/([da-fA-F]{2}) ?/g, "0x$1 ").replace(/+$/,).分裂(" ")));}函数 base64ToHex(str) {for (var i = 0, bin = atob(str.replace(/[
]+$/, "")), hex = []; i 头部><身体><div><p>输入原始十六进制:<br><textarea rows="4" cols="50" id="myText">在此处输入原始十六进制字符串...</textarea><br><button id="myButton" onclick="doConvert()">点击我</button><br><img id="myImage" alt="img1"/></p>