UNPKG

3.2 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11var __importDefault = (this && this.__importDefault) || function (mod) {
12 return (mod && mod.__esModule) ? mod : { "default": mod };
13};
14Object.defineProperty(exports, "__esModule", { value: true });
15const jimp_1 = __importDefault(require("jimp"));
16const Errors_1 = require("./Errors");
17const ASPECT_FILL = 'cover';
18const ASPECT_FIT = 'contain';
19function createBaseImageAsync(width, height, color) {
20 return __awaiter(this, void 0, void 0, function* () {
21 return new Promise((resolve, reject) => new jimp_1.default(width, height, color, (err, image) => {
22 if (err) {
23 reject(err);
24 return;
25 }
26 resolve(image);
27 }));
28 });
29}
30function compositeImagesAsync(image, ...images) {
31 return __awaiter(this, void 0, void 0, function* () {
32 for (const imageProps of images) {
33 const childImage = yield jimp_1.default.read(imageProps);
34 image.composite(childImage, 0, 0);
35 }
36 return image;
37 });
38}
39function resize(inputPath, mimeType, width, height, fit = 'contain', background) {
40 return __awaiter(this, void 0, void 0, function* () {
41 try {
42 const initialImage = yield jimp_1.default.read(inputPath);
43 const center = jimp_1.default.VERTICAL_ALIGN_MIDDLE | jimp_1.default.HORIZONTAL_ALIGN_CENTER;
44 if (fit === ASPECT_FILL) {
45 return yield initialImage
46 .cover(width, height, center)
47 .quality(100)
48 .getBufferAsync(mimeType);
49 }
50 else if (fit === ASPECT_FIT) {
51 const resizedImage = yield initialImage.contain(width, height, center).quality(100);
52 if (!background) {
53 return resizedImage.getBufferAsync(mimeType);
54 }
55 const splashScreen = yield createBaseImageAsync(width, height, background);
56 const combinedImage = yield compositeImagesAsync(splashScreen, resizedImage);
57 return combinedImage.getBufferAsync(mimeType);
58 }
59 else {
60 throw new Errors_1.IconError(`Unsupported resize mode: ${fit}. Please choose either 'cover', or 'contain'`);
61 }
62 }
63 catch ({ message }) {
64 throw new Errors_1.IconError(`It was not possible to generate splash screen '${inputPath}'. ${message}`);
65 }
66 });
67}
68exports.resize = resize;
69//# sourceMappingURL=ImageComposite.js.map
\No newline at end of file