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

关于这个话题,我有两个问题。

1.为什么我不能用uint16array代替uint8array?

2.我读了维基百科。但是它包含许多技术资料。您能否阐明“幻数”,以便我可以理解它的真正含义(简而言之)

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

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');
             }

    });

最佳答案

您不能在此处使用Uint16Array,因为该文件的字节数为奇数。确切地说,Uint16Array需要偶数个字节(2的倍数)。

另外,我不太确定它会达到什么目的。 Unit16Array以平台字节顺序读取数据,这将导致不同的结果,具体取决于平台。而且您可以肯定地检查带有字节的幻数。
幻数只是在给定位置(通常在文件的最开始)的字节序列,它使人们可以识别文件类型。当然,幻数的存在不足以使文件成为可识别格式的有效文件,但是如果没有幻数,则绝对排除文件为必需类型(对于包含幻数的文件类型,则不是所有这些都是必然的)。

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

10-11 20:33