t-comm
Version:
专业、稳定、纯粹的工具库
130 lines (127 loc) • 4.52 kB
JavaScript
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
import _regeneratorRuntime from '@babel/runtime/regenerator';
import { _ as __awaiter } from '../tslib.es6-848120af.js';
import { saveBase64ImgToFile } from '../node-img/img.mjs';
import { getPath } from '../nodejs/path.mjs';
import { getImageSize } from '../third-party/image-size.mjs';
import { getCanvas } from './get-canvas.mjs';
import '../nodejs/crypto.mjs';
import '../nodejs/fs.mjs';
import '../nodejs/request.mjs';
import '../third-party/canvas.mjs';
/**
* 绘制多张图
* @param {object} config 输入参数
* @param {Array<string>} config.imgs base64图片列表
* @returns {string} 图片url
*
* @example
*
* mergeMultiCanvasPic({
* imgs: [img, img2, img3],
* })
*/
function mergeMultiCanvasPic(_ref) {
var imgs = _ref.imgs;
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
var sizeOf, canvasLibrary, createCanvas, loadImage, getSavePath, dimensionMap, i, img, savePath, dimensions, oHeight, oWidth, getMaxWidth, getTotalHeight, getPastHeight, ONE_HEIGHT_GAP, getPastGap, CANVAS_MARGIN_TOP, canvas, ctx, drawBackground, _i2, imgSrc, _dimensions, _oHeight, _oWidth, image, imgUrl;
return _regeneratorRuntime.wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
drawBackground = function _drawBackground() {
ctx.fillStyle = '#fff';
ctx.fillRect(0, 0, canvas.width, canvas.height);
};
sizeOf = getImageSize();
canvasLibrary = getCanvas();
if (canvasLibrary) {
_context.next = 1;
break;
}
return _context.abrupt("return", '');
case 1:
createCanvas = canvasLibrary.createCanvas, loadImage = canvasLibrary.loadImage;
getSavePath = function getSavePath(i) {
return getPath().resolve(__dirname, "".concat(i, ".png"));
};
dimensionMap = {
width: [],
height: []
};
i = 0;
case 2:
if (!(i < imgs.length)) {
_context.next = 5;
break;
}
img = imgs[i];
savePath = getSavePath(i);
_context.next = 3;
return saveBase64ImgToFile({
imgUrl: img,
savePath: savePath
});
case 3:
dimensions = sizeOf(savePath);
oHeight = dimensions.height, oWidth = dimensions.width;
dimensionMap.width.push(oWidth);
dimensionMap.height.push(oHeight);
case 4:
i++;
_context.next = 2;
break;
case 5:
getMaxWidth = function getMaxWidth() {
return Math.max.apply(Math, _toConsumableArray(dimensionMap.width));
};
getTotalHeight = function getTotalHeight() {
return dimensionMap.height.reduce(function (acc, item) {
return acc + item;
}, 0);
};
getPastHeight = function getPastHeight(heights, index) {
var res = 0;
for (var _i = 0; _i < heights.length; _i++) {
if (_i < index) {
res += heights[_i];
}
}
return res;
};
ONE_HEIGHT_GAP = 50;
getPastGap = function getPastGap(index) {
return index * ONE_HEIGHT_GAP;
};
CANVAS_MARGIN_TOP = 0;
canvas = createCanvas(getMaxWidth(), getTotalHeight() + CANVAS_MARGIN_TOP + getPastGap(imgs.length - 1));
ctx = canvas.getContext('2d');
drawBackground();
_i2 = 0;
case 6:
if (!(_i2 < imgs.length)) {
_context.next = 9;
break;
}
imgSrc = getSavePath(_i2);
_dimensions = sizeOf(imgSrc);
_oHeight = _dimensions.height, _oWidth = _dimensions.width;
_context.next = 7;
return loadImage(imgSrc);
case 7:
image = _context.sent;
ctx.drawImage(image, 0, getPastHeight(dimensionMap.height, _i2) + getPastGap(_i2), _oWidth, _oHeight);
case 8:
_i2++;
_context.next = 6;
break;
case 9:
imgUrl = canvas.toDataURL();
return _context.abrupt("return", imgUrl);
case 10:
case "end":
return _context.stop();
}
}, _callee);
}));
}
export { mergeMultiCanvasPic };