Мне нужно получить доступ к EXIF
данным в изображениях, уже загруженных на страницу. Скажем, из расширения браузера. AFAIU, есть некоторые подходы к использованию JavaScript для выполнения задачи:Получить двоичные данные/EXIF с изображения на странице
- JavaScript-Load-Image;
- Nihologic EXIF manipulation library;
- нарисовать изображение на холсте.
Первые два подхода могут касаться локальных файлов или требовать выполнения дополнительного (лишнего в этом случае) запроса на сервер для извлечения двоичных данных. Последняя вероятная работа:
var canvas = document.createElement("canvas");
canvas.width = oImg.width;
canvas.height = oImg.height;
// Copy the image contents to the canvas
var ctx = canvas.getContext("2d");
ctx.drawImage(oImg, 0, 0);
// Get the data-URL formatted image
var dataURL = window.atob(canvas.toDataURL("image/jpeg", 1.0).split(',')[1]);
но результирующий двоичный объект не содержит EXIF данные (0xE1
маркера), кажется, что когда-то нарисовано на холсте, он дает JFIF (0xE0
) маркер вместо.
Итак, мой вопрос: Можно ли получить доступ к двоичным данным уже загруженного изображения на странице?
Обратите внимание: есть similar questions уже на SO, но никто не отвечает на вопрос, как не перезагружать изображение и не получить доступ к данным EXIF.
Я понимаю, что я мог бы сохранить изображение локально, скажем, в LocalStorage, а затем использовать упомянутую выше библиотеку, но также выглядит как излишний.
Существует нет доступа к данным EXIF без использования холста, а холст подчиняется политике одного и того же происхождения и может загружать только локальные изображения, поэтому это невозможно сделать без использования сервера, чтобы получить изображения или хранения изображения как-то на стороне клиента, чтобы избежать политики одного и того же происхождения. – adeneo
Я подозревал это, но это странно, поскольку у меня всегда есть возможность сохранить изображение и/или повторно запросить его как двоичный ресурс. Жаль. –
Почему бы просто не использовать что-то вроде https://github.com/jseidelin/exif-js? –