javascript - 在浏览器中显示 .raw 文件图像

标签 javascript image jpeg rawimage

我有一个 .raw 格式的图像文件,可以直接从指纹扫描仪设备读取。我们必须使用 html 和 javascript 在浏览器中显示它。我们如何转换.raw图像并在浏览器中显示?

以下是我使用在线工具进行转换的手动步骤

我可以使用在线转换器 http://tomeko.net/online_tools/hex_to_file.php?lang=en 将该十六进制内容转换为 .raw 文件

转换后的原始文件可以通过https://www.iloveimg.com/convert-to-jpg/raw-to-jpg再次转换为jpeg文件网址

示例文件将如下所示 /image/bnycl.jpg

我尝试使用以下代码在浏览器中显示十六进制内容,但没有成功。

function hexToBase64(str) {
    return btoa(String.fromCharCode.apply(null, str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")));
}

var img = new Image();
img.src = "data:image/jpeg;base64,"+hexToBase64(getBinary());
document.body.appendChild(img);

完整的jsfiddle是http://jsfiddle.net/varghees/79NnG/1334/

最佳答案

首先,您在 fiddle 中提供的内容可能不是 .raw 文件。

虽然有大量不同的文件格式使用此扩展,但我不太认同根本没有元数据的事实,因为这至少需要知道图像的大小。

所以我对 future 的读者感到抱歉,但这个答案仅展示如何将原始 8 位值转换为实际图像......

现在,没有图像大小,但如果图像是平方的,我们实际上可以只从 byteLength 来实现(宽度和高度都将是 byteLength 的平方根)。

一般步骤是

  • (将十六进制字符串转换为实际的 Uint8Array)
  • 将 Uint8ClampedArray 的所有第四个值设置为比第一个 Uint8Array 大 4 倍(这将设置我们即将成为 RGBA 图像的 Alpha channel )
  • 在 ImageData() 构造函数中传递此 Uint8ClampedArray。
  • 将此 ImageData 放在 Canvas 上
  • 塔达!

因此使用充满随机值的正方形(从而避免十六进制到缓冲区的转换):

const fake = new Uint8Array( 256*256 );
crypto.getRandomValues(fake); // get random values

processSquareBitmap(fake.buffer);

function processSquareBitmap(buffer) {
	const view = new Uint8Array(buffer);
  const out = new Uint8ClampedArray(buffer.byteLength * 4);
  const size = Math.sqrt(view.length);
  if(size % 1) {
  	console.error('not a square');
    return;
  }
  // set alpha channel
  view.forEach((a,i)=>out[(i*4)+3] = a);
  const image = new ImageData(out, size, size)
  const canvas = document.createElement('canvas');
  canvas.width = canvas.height = size;
  canvas.getContext('2d').putImageData(image, 0,0);
  // if you want to save a png version
//  canvas.toBlob(b=> saveAs(b, 'bitmap.png'));
  document.body.appendChild(canvas);
}

但对于非方形图像,您必须具有实际的宽度和高度。
我能够推断出OP的十六进制数据,从而可以得到this fiddle这将显示他们的图像。

关于javascript - 在浏览器中显示 .raw 文件图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50618840/

相关文章:

javascript - jQuery 将新行追加到表中 - 检测现有行但不添加新行

javascript - 为什么 socket.post() 比 socket.emit() 慢 [太慢了]

javascript - 为新遗物追踪扩展 catch 原型(prototype)

image - JavaFx 图像大小调整

angular - Data-URL较大时,未渲染图像:net::ERR_CONNECTION_RESET

c++ - 编译器找不到jpeg和png库

javascript - .append() 删除添加的元素

php - 我的 php 生成的 png 文件有什么问题?

qt - 将 Qt 小部件捕获为图像文件

android - 测量可绘制对象的大小(内存)