package/src/utils/image.js (44 lines of code) (raw):

import memoize from 'lodash/memoize' import { Placement } from '@/enums/Placement' import { Angle } from '@/enums/Rotation' const loadImage = memoize( async (imageURL, imageGetter) => { const src = imageGetter ? await imageGetter(imageURL) : imageURL return new Promise((resolve, reject) => { const image = new Image() image.onload = () => resolve({ image, imageURL }) image.onerror = reject image.src = src }) } ) const getImagePosition = (angle) => { switch (angle) { case Angle.D_0: return ({ originX: Placement.LEFT, originY: Placement.TOP }) case Angle.D_90: return ({ originX: Placement.LEFT, originY: Placement.BOTTOM }) case Angle.D_180: return ({ originX: Placement.RIGHT, originY: Placement.BOTTOM }) case Angle.D_270: return ({ originX: Placement.RIGHT, originY: Placement.TOP }) default: throw new Error(`Unsupported angle: ${angle}`) } } export { loadImage, getImagePosition }