(Node.JS Jimp)如何将文本居中?

6rvt4ljy  于 2023-04-11  发布在  Node.js
关注(0)|答案(2)|浏览(127)

我有一个500 px x x 167 px的图像,我想添加2行文本,但这些文本需要居中,我该怎么做?我使用node.js和jimp包,最后一行总是会改变长度,因为在不同的用户名!

Jimp.read("./imgs/background.png").then(function (image) {
        image.resize(500, Jimp.AUTO)
        .quality(100);
        image.write("./imgs/background-test.png");

      Jimp.loadFont(Jimp.FONT_SANS_32_WHITE).then(function (font) {

        //What do I do here? image.print(font, x, y, "Welcome Username", 7)

        image.getBuffer(Jimp.MIME_PNG, (err, buffer) => {
          image.write("./imgs/background-test.png");
        })
      });

      }).catch(function (err) {
        console.error(err);
      });
gupuwyp2

gupuwyp21#

所以我看到这个问题还没有答案,所以为了将来的参考,我只回答这个问题。
这个特性是在版本285中添加的,但它从来没有得到很好的记录。

image.print(font, pos.x, pos.y, {
    text: "Example test",
    alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER,
    alignmentY: Jimp.VERTICAL_ALIGN_CENTER
}, pos.maxX, pos.maxY);

pos.maxX.maxY有时候是需要的,这样Jimp就知道文本居中的位置,* 有时候 * 它自己会这样做,但如果它不起作用,那么这基本上是调试的第一步。
如果这不起作用,您可以使用老式的方法,通过获取图像和位图的大小,将其除以2并将其定义为x和y(最大)位置。
请给予我这个职位的反馈,这是我的第一个答案,我很想学习写更好的答案。

wgx48brx

wgx48brx2#

用途:Jimp.HORIZONTAL_ALIGN_CENTERJimp.VERTICAL_ALIGN_MIDDLE

const Jimp = require('jimp');

Jimp.read("./imgs/background-test.png").then(function (image) {

    image.resize(500, Jimp.AUTO)
    .quality(100);
    image.write("./imgs/background-test.png");

  Jimp.loadFont(Jimp.FONT_SANS_32_WHITE).then(function (font) {

    image.print(font, 0, 0, {
      text: "Welcome Username",
      alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER,
      alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE
    }, image.bitmap.width, image.bitmap.height);

    image.getBuffer(Jimp.MIME_PNG, (err, buffer) => {
      image.write("./imgs/background-test.png");
    })
  });

  }).catch(function (err) {
    console.error(err);
  });

相关问题