#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. Пожалуйста, также обратите внимание, что только потому, что несколько байтов находятся в самом начале файла, это не означает, что остальное соответствует какой-либо заданной спецификации.