javascript - 使用 uint8 和 uint16 数组将图像读取为 arraybuffer

标签 javascript filereader fileapi unsigned-integer

这是一段代码,用于通过检查所需的魔数(Magic Number)来检查上传的图像mime类型(我仍然不太清楚它们)。当我将 blob 文件提供给 uint8Array 时,它可以工作,数组会填充。但如果我使用 uint16array 则会出现错误。出现此错误的原因可能是什么。它说无效论证。

我对这个主题有两个问题。

1。为什么我不能使用 uint16array 而不是 uint8array ?

2。我读了维基百科。但它包含了很多技术性的东西。你能解释一下“神奇数字”吗,以便我能理解它到底是什么(简而言之)

enter image description here

var upload=document.getElementById('upload');
upload.addEventListener('change',function(e){



    if(window.File && window.FileReader &&  window.FileList){

                    var file=e.target.files[0];
                    console.log(file.type);

                    var fileReader=new FileReader();

                    fileReader.onload= function(e){
                             var arr = (new Uint8Array(e.target.result));

                             console.log(arr);
                             var arr2=(new Uint16Array(e.target.result));
                             console.log(arr2);

                    };
             fileReader.readAsArrayBuffer(file);
             }else{
                 alert('file api not compatible with your browser');
             }  

    });

最佳答案

  1. 此处不能使用 Uint16Array,因为文件的字节数为奇数。根据确定,Uint16Array 需要偶数个字节(2 的倍数)。

    此外,我不太确定它的用途是什么。 Unit16Array 按照平台字节顺序读取数据,这会根据平台的不同导致不同的结果。你绝对可以用字节来检查魔数(Magic Number)。

  2. 魔数(Magic Number)只是给定位置(通常在文件的开头)的字节序列,它允许人们识别文件类型。当然,魔数(Magic Number)的存在不足以使该文件成为可识别格式的有效文件,但它的缺失肯定会排除该文件属于所需类型(对于包含魔数(Magic Number)的文件类型,这不是所有这些都必然如此)。

关于javascript - 使用 uint8 和 uint16 数组将图像读取为 arraybuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34225642/

相关文章:

javascript - 使用 jQuery FileReader 获取宽度和高度?

php - 尝试使用 XHR 2 和 PHP 上传多张图片

javascript - 上传前如何操作内存中的文件流

internet-explorer-9 - 文件 API 在 IE9 中不工作

javascript - 如何从 Blob 创建文件对象?

javascript - 为什么按钮消失了?

javascript - 如何在 javascript 中向 iso 格式日期添加额外的一天

html - 上传前在JS中提取音频比特和采样率信息

javascript - AJAX - 执行顺序有保证吗?

javascript - JavaScript 中的法语字符 HTML 中的 XSLT