UNPKG

@ngageoint/mage.image.service

Version:

Orient images attached to MAGE observations according to EXIF meta-data and generate configurable size thumbnails.

71 lines 2.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SharpImageService = void 0; const sharp_1 = __importDefault(require("sharp")); function ImageDescriptor(info) { return { sizeInBytes: info.size, mediaType: `image/${info.format}`, dimensions: { width: info.width, height: info.height } }; } class ImageOperation { static apply(transform) { const state = { resolve: ((x) => void (0)), finished: false, desc: undefined }; transform = transform .on('info', x => { const desc = ImageDescriptor(x); if (state.finished) { return void (state.resolve(desc)); } state.desc = desc; }) .on('finish', () => { if (state.desc) { return void (state.resolve(state.desc)); } state.finished = true; }) .on('error', x => { state.resolve(x instanceof Error ? x : new Error(String(x))); }); const RunOp = class extends Promise { to(input, output) { input.pipe(transform).pipe(output); return this; } }; return new RunOp(resolve => { state.resolve = resolve; }); } } const defaultOptions = { failOn: 'error' }; function SharpImageService() { return { autoOrient(source, dest) { const orient = (0, sharp_1.default)(defaultOptions).rotate(); return ImageOperation.apply(orient).to(source.bytes, dest); }, scaleToDimension(minDimension, source, dest) { const { width, height } = source.dimensions || { width: 0, height: 0 }; const targetDimensions = width < height ? { width: minDimension } : { height: minDimension }; const scale = (0, sharp_1.default)(defaultOptions).resize(targetDimensions); return ImageOperation.apply(scale).to(source.bytes, dest); } }; } exports.SharpImageService = SharpImageService; //# sourceMappingURL=adapters.images.sharp.js.map