0

JIMP使用位图字体......似乎没有设置颜色的选项。

我想将字体的颜色更改为任意颜色,然后将此水印文本覆盖在基本背景图像上。

我可以加载图像并在其上放置文本,如下所示:

Jimp.read('testImage.jpg', (err, baseImage) => {
    if (err) throw err;

    Jimp.loadFont(Jimp.FONT_SANS_32_BLACK).then(font => {
        baseImage.print(font, 0, 0, "My Text")
        baseImage.write('testOutput.jpg'); // save
    });

});

但是更改 JIMP 字体的颜色似乎并不明显。

4

1 回答 1

0

解决了这个问题。

它利用创建透明图像,在该图像上放置黑色文本,然后使用 xor 操作有效地“着色”黑色文本。您将新着色的文本图层拖放到原始基础图像上。

看:

Jimp.read('testImage.jpg', (err, baseImage) => {
    if (err) throw err;

    let textImage = new Jimp(1000,1000, 0x0, (err, textImage) => {  
        //((0x0 = 0 = rgba(0, 0, 0, 0)) = transparent)
        if (err) throw err;
    })


    Jimp.loadFont(Jimp.FONT_SANS_32_BLACK).then(font => {
        textImage.print(font, 0, 0, "My Text")
        textImage.color([{ apply: 'xor', params: [#00ff00] }]); 
        image.blit(textImage, 0, 0)
        image.write('testOutput.jpg'); // save
    });
});

最终结果:testOutput.jpg 看起来像 testImage.jpg,但上面有蓝色文本,上面写着“我的文本”。

我相信您也可以缩小创建的“textImage”的大小,但是为了改变颜色的插图目的,将其硬编码为 1000x1000 是可行的。

于 2022-02-21T21:22:32.307 回答