как проверить, действительно ли изображение в формате jpeg или нет?

#javascript #angularjs #file #encoding #hex

#javascript #angularjs #файл #кодирование #шестнадцатеричное

Вопрос:

Я применил код, чтобы проверить, действительно ли расширение изображения совпадает с содержимым изображения. Я проверил начальные два значения необработанного изображения и сопоставил их с [0xFF, 0xD8], чтобы определить, является ли это изображение jpg или jpeg.

Он отлично работает с изображением jpg .. но не работает для формата JPEG. Википедия дала одинаковые эти две начальные кодировки как для jpeg, так и для jpg. но для jpeg я получаю [137,80]

 $scope.checkContentOfImage=function(file){
var deferred =$q.defer();

var reader = new FileReader();

reader.onloadend  = function (e) {
    var arr = (new Uint8Array(e.target.result)).subarray(0, 4);
    let flag=true;
    let pattern=[0xFF, 0xD8];
    for(let i=0 ; i< 2; i  ){
        if(arr[i]!=pattern[i]){
            flag=false;
            break;
    }}
if(flag){
    deferred.resolve("success");
}
else{
    deferred.reject("not image file");
}

}
reader.onerror=function(){
    deferred.reject("failuer in checking content");
}
reader.readAsArrayBuffer(file);
return deferred.promise;

}
 

Как я могу проверить формат кодировки jpeg? Это нормально работает для jpg

Комментарии:

1. Два расширения имени файла означают одно и то же; это все JPEG.

2. 137,80 == 0x89 0x50 == Заголовок PNG — файл имеет формат PNG.

3. Тогда почему оно преобразуется в формат intp [137,80] для расширения jpeg?

4. Предположительно, это PNG с неправильным расширением.

5. Пожалуйста, также обратите внимание, что только потому, что несколько байтов находятся в самом начале файла, это не означает, что остальное соответствует какой-либо заданной спецификации.