ultimate-text-to-image
Version:
Generate UTF8 texts into image with auto line break for all international language, including Chinese, Japanese, Korean, etc..
56 lines (55 loc) • 2.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.VerticalImage = void 0;
const canvas_1 = require("canvas");
const BaseClass_1 = require("./BaseClass");
const canvas_2 = require("./utils/canvas");
class VerticalImage extends BaseClass_1.BaseClass {
constructor(ultimateTextToImages, options = {}, renderOptions = {}) {
super();
this.ultimateTextToImages = ultimateTextToImages;
this.options = options;
this.renderOptions = renderOptions;
}
render() {
this._startTimer();
const { backgroundColor } = this.options;
const margin = this.options.margin || 0;
for (const ultimateTextToImage of this.ultimateTextToImages) {
ultimateTextToImage.render();
}
const width = this.ultimateTextToImages
.reduce((a, b) => Math.max(a, b.width), 0) + margin * 2;
const height = this.ultimateTextToImages.reduce((a, b) => a + b.height, 0) + margin * 2;
this._canvas = new canvas_1.Canvas(width, height);
const ctx = this._canvas.getContext("2d");
// hook
(0, canvas_2.renderHook)(this._canvas, this.renderOptions.preRender);
// draw background
(0, canvas_2.drawBackgroundColor)(ctx, { color: backgroundColor });
let x = 0;
let y = margin;
for (const ultimateTextToImage of this.ultimateTextToImages) {
let align = this.options.align;
if (ultimateTextToImage.options.nestedAlign) {
align = ultimateTextToImage.options.nestedAlign;
}
if (align === "right") {
x = width - ultimateTextToImage.width - margin;
}
else if (align === "center") {
x = (width - ultimateTextToImage.width) / 2;
}
else {
x = margin;
}
ctx.drawImage(ultimateTextToImage.canvas, x, y);
y += ultimateTextToImage.height;
}
// hook
(0, canvas_2.renderHook)(this._canvas, this.renderOptions.posRender);
this._endTimer();
return this;
}
}
exports.VerticalImage = VerticalImage;