@loaders.gl/images
Version:
Framework-independent loaders and writers for images (PNG, JPG, ...)
62 lines (61 loc) • 1.85 kB
JavaScript
export function isImage(image) {
return Boolean(getImageTypeOrNull(image));
}
export function deleteImage(image) {
switch (getImageType(image)) {
case 'imagebitmap':
image.close();
break;
default:
// Nothing to do for images and image data objects
}
}
export function getImageType(image) {
const format = getImageTypeOrNull(image);
if (!format) {
throw new Error('Not an image');
}
return format;
}
export function getImageSize(image) {
return getImageData(image);
}
export function getImageData(image) {
switch (getImageType(image)) {
case 'data':
return image;
case 'image':
case 'imagebitmap':
// Extract the image data from the image via a canvas
const canvas = document.createElement('canvas');
// TODO - reuse the canvas?
const context = canvas.getContext('2d');
if (!context) {
throw new Error('getImageData');
}
// @ts-ignore
canvas.width = image.width;
// @ts-ignore
canvas.height = image.height;
// @ts-ignore
context.drawImage(image, 0, 0);
// @ts-ignore
return context.getImageData(0, 0, image.width, image.height);
default:
throw new Error('getImageData');
}
}
// PRIVATE
// eslint-disable-next-line complexity
function getImageTypeOrNull(image) {
if (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {
return 'imagebitmap';
}
if (typeof Image !== 'undefined' && image instanceof Image) {
return 'image';
}
if (image && typeof image === 'object' && image.data && image.width && image.height) {
return 'data';
}
return null;
}