Могу ли я прочитать данные Exif изображения на стороне клиента с помощью js?

У меня маленькая "большая" проблема.
Я использую Agile-Uploader для загрузки нескольких изображений, этот компонент изменяет размер всей картинки (работает очень хорошо), но при этом я теряю exif-данные.
Могу ли я читать данные exif на стороне клиента с помощью JS? учитывая, что это не одно и то же имя домена.

0 ответов

Да. Есть новая библиотека exifr, с которой вы можете делать именно это. Это поддерживаемая, активно развивающаяся библиотека с упором на производительность и работающая как в nodejs, так и в браузере.

Простой пример извлечения exif из одного файла:

document.querySelector('#filepicker').addEventListener('change', async e => {
  let file = e.target.files[0]
  let exifData = await exif.parse(file)
  console.log('exifData', exifData)
})

Сложный пример извлечения exif из многослойных файлов:

document.querySelector('#filepicker').addEventListener('change', async e => {
    let files = Array.from(e.target.files)
    let promises = files.map(exif.parse)
    let exifs = await Promise.all(promises)
    let dates = exifs.map(exif => exif.DateTimeOriginal.toGMTString())
    console.log(`${files.length} photos taken on:`, dates)
})

И вы даже можете извлечь миниатюру, встроенную в файл:

let img = document.querySelector("#thumb")
document.querySelector('input[type="file"]').addEventListener('change', async e => {
  let file = e.target.files[0]
  img.src = await exifr.thumbnailUrl(file)
})

Вы также можете опробовать игровую площадку библиотеки и поэкспериментировать с изображениями и их выводом или заглянуть в репозиторий и документацию.

Другие вопросы по тегам