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

时间:2015-12-11 14:19:09

标签: javascript filereader fileapi unsigned-integer

这是一段代码,通过检查所需的 幻数 来检查上传的图像mime类型(我仍然不清楚它们)。当我向uint8Array提供blob文件时它工作,数组填充。但是如果我使用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 个答案:

答案 0 :(得分:0)

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

    另外,我不太清楚它的用途是什么。 Unit16Array以平台字节顺序读取数据,这将导致根据平台的不同结果。你绝对可以用字节检查一个神奇的数字。

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