| function createImageWithMetadata({ |
| width, |
| height, |
| preferredWidth, |
| preferredHeight, |
| resolutionX, |
| resolutionY, |
| resolutionUnit, |
| orientation |
| }) { |
| const canvas = document.createElement('canvas') |
| canvas.width = width || 100 |
| canvas.height = height || 100 |
| const ctx = canvas.getContext('2d') |
| ctx.fillColor = 'green' |
| ctx.fillRect(0, 0, canvas.width, canvas.height) |
| const original = canvas.toDataURL('image/jpeg') |
| const root = {} |
| const exif = {} |
| if (orientation !== undefined) |
| root[piexif.ExifIFD.Orientation] = orientation |
| if (resolutionX !== undefined) |
| root[piexif.ImageIFD.XResolution] = [resolutionX, 1] |
| if (resolutionY !== undefined) |
| root[piexif.ImageIFD.YResolution] = [resolutionY, 1] |
| if (resolutionUnit !== undefined) |
| root[piexif.ImageIFD.ResolutionUnit] = resolutionUnit |
| if (preferredWidth !== undefined) |
| exif[piexif.ExifIFD.PixelXDimension] = preferredWidth |
| if (preferredHeight !== undefined) |
| exif[piexif.ExifIFD.PixelYDimension] = preferredHeight |
| const exifString = piexif.dump({'0th': root, 'Exif': exif}) |
| const newDataUrl = piexif.insert(exifString, original) |
| const image = new Image() |
| image.src = newDataUrl |
| return new Promise(resolve => { |
| image.onload = () => resolve(image); |
| }) |
| } |