var isNode = typeof require === 'function'
var isBrowser = typeof navigator === 'object'
if (isBrowser) {
var {parse} = window['exifr']
} else if (isNode) {
var {parse} = require('../dist/full.umd.js')
var fs = require('fs').promises
}
var imageUrl = '../test/fixtures/IMG_20180725_163423.jpg'
var options = {
ifd1: false, // thumbnail
exif: false,
interop: false,
gps: true,
}
// Helper functions
async function runExperiment(arg, description) {
console.time(description)
var exif = await parse(arg, options)
console.timeEnd(description)
//console.log('lat lon', exif.latitude, exif.longitude)
}
// Content creation helper functions
function createImg(src) {
var img = document.createElement('img')
img.src = src
return img
}
function createArrayBuffer() {
return fetch(imageUrl).then(res => res.arrayBuffer())
}
function createBlob() {
return fetch(imageUrl).then(res => res.blob())
}
async function createObjectUrl() {
return URL.createObjectURL(await createBlob())
}
function createBase64Url() {
return new Promise(async (resolve, reject) => {
var blob = await createBlob()
var reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.onerror = reject
reader.readAsDataURL(blob)
})
}
// Showtime baby!
// Node-only code
if (isNode) runNodeCode().catch(console.error)
// Browser-only code
if (isBrowser) runBrowserCode().catch(console.error)
async function runNodeCode() {
var buffer = await fs.readFile(imageUrl)
await runExperiment(buffer, 'buffer')
await runExperiment(imageUrl, 'filepath')
}
async function runBrowserCode() {
var arrayBuffer = await createArrayBuffer()
await runExperiment(arrayBuffer, `ArrayBuffer`)
var blob = await createBlob()
await runExperiment(blob, `Blob`)
var simpleUrl = imageUrl
await runExperiment(simpleUrl, `URL`)
var objectUrl = await createObjectUrl()
await runExperiment(objectUrl, `Object URL`)
var base64Url = await createBase64Url()
await runExperiment(base64Url, `Base64 URL`)
var imgUrl = createImg(imageUrl)
await runExperiment(imgUrl, `
with simple URL`)
var imgObjectUrl = createImg(await createObjectUrl())
await runExperiment(imgObjectUrl, `
with Object URL`)
var imgBase64Url = createImg(await createBase64Url())
await runExperiment(imgBase64Url, `
with Base64 URL`)
}