将JIMP中图像上的文字包装不起作用



我正在尝试将文本写入图像并与JIMP一起包裹文本,但目前文本在图像上的一行上溢出。我关注文档,但我的文档不起作用。这是我的代码:

let image = {};
        return Jimp.read('app/background.png')
        .then(imageResponse => {
            // Image is 500 x 500
            image = imageResponse
            return Jimp.loadFont(Jimp.FONT_SANS_64_BLACK);
        })
        .then(font => {
            return image.print(font, margin, margin, 'Very Long Hello WOrld Text', 200)
        })
        .then(image => {
            return image.writeAsync(`app/new-${(new Date()/1000)}.png`);
        })

有点迟到以回答这个问题,但是我想出了自己的逻辑来包装JIMP Image内的文本。

下面的代码将创建一系列字符串,其长度小于允许的限制。

因此我们可以根据图像宽度更改限制。

let message = "Some very large text which will not fit in one line, lets try fitting this in multiple lines";
let x = 10;
let y = 10;
let stringArr = message.split(' ');
let finalArr = [];
let strLengthBefore = 0, strLengthAfter = 0;
let limitLength = 30;
let tempStr = '';
for (let i = 0; i < stringArr.length; i++) {
    strLengthAfter = strLengthBefore + stringArr[i].length + 1;
    if (strLengthAfter >= limitLength) {
        finalArr.push(tempStr);
        tempStr = '';
        strLengthBefore = 0, strLengthAfter = 0;
        i = i - 1;
    } else {
        tempStr += stringArr[i] + ' ';
        strLengthBefore += stringArr[i].length;
        if (i == stringArr.length - 1) {
            finalArr.push(tempStr);
            break;
        }
    }
}

现在只需循环绕过数组,并在图像上打印文本。

 let font = await Jimp.loadFont(path.join(base_path, 'montserrat_bold_italic.fnt'));
    y = 200;
    for (let i = 0; i < finalArr.length; i++) {
        image.print(font,
            10,
            y,
            {
                text: finalArr[i],
                alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER,
                // alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE
            },
            560,
            800
        );
        y += 30;
    }

希望这会有所帮助。

最新更新