Я пытаюсь получить exif-данные из JPG, используя JavaScript в браузере.
Я использую класс FileReader () и метод readAsArrayBuffer ().
Для большинства операций мне нужен Uint8Array, поэтому я использую ArrayBuffer.
Я добавил функцию к объектам Uint8Array, когда мне нужно короткое:
const getShort = function(position, bigEndian = true) {
const int1 = this[position];
const int2 = this[position+1];
let result = (int1 << 8) | (int2 & 0xFF);
if(!bigEndian) {
let buffer = new ArrayBuffer(16);
let view = new DataView(buffer);
view.setInt16(1,result);
result = view.getInt16(1, true) ;
}
return(result);
}
Проблема в том, что при разборе 0110 1001
и 1000 0111
я получаю 1000 0111 0110 1001
, и это интерпретируется как -30871
вместо 34665
.