Nodejs GM中文乱码如何解决?

Nodejs GM中文乱码如何解决?

gm(300,300,‘green’) .font(‘stliti’)//中文字体已写在配置文件中 .fontSize(50) .drawText(10, 150, ‘ABC验证码’) .write(“D:\node\gmtest\a1.jpg”,function(err) { if (err) console.log(err); }); ![Alt text](data:image/jpg;base64,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)


4 回复

Nodejs GM中文乱码如何解决?

在使用gm库处理中文字符时,可能会遇到中文乱码问题。为了解决这个问题,我们需要确保字体支持中文,并且正确设置字体路径。以下是一个示例代码,展示了如何解决这个问题。

示例代码

const gm = require('gm').subClass({ imageMagick: true });

// 设置正确的字体路径
const fontPath = 'path/to/stliti.ttf'; // 替换为你的中文字体文件路径

gm(300, 300, '#00FF00')
    .font(fontPath) // 使用正确的中文字体路径
    .fontSize(50)
    .drawText(10, 150, 'ABC验证码')
    .write("D:/node/gmtest/a1.jpg", function(err) {
        if (err) console.log(err);
    });

解释

  1. 字体路径

    • fontPath变量用于存储中文字体文件的路径。确保字体文件支持中文字符。
  2. 设置字体

    • 使用font(fontPath)方法来指定字体路径。这一步非常重要,因为gm库需要知道使用哪个字体来渲染中文字符。
  3. 绘制文本

    • 使用drawText(x, y, text)方法在图像上绘制文本。确保文本内容包含中文字符。
  4. 保存图像

    • 使用write(path, callback)方法将生成的图像保存到指定路径。

注意事项

  • 确保字体文件路径正确无误。
  • 字体文件必须支持中文字符。常见的中文字体如STLITI.TTF可以放在项目目录中或系统字体目录中。
  • 在不同的操作系统上,字体路径可能有所不同。确保路径格式正确。

通过以上步骤,你应该能够解决Node.js中使用gm库处理中文乱码的问题。


建议使用https://github.com/LearnBoost/node-canvas

windows系统下 问题解决了。再安装ImageMagick,说一下过程避免后人掉坑。

First install either GraphicsMagick or ImageMagick. Then: npm install gm

官网说GraphicsMagick 或 ImageMagick 都可以, 刚开始安装了GraphicsMagick ,网上都说这个好点是从ImageMagick 分离出来的。 var gm = require(‘gm’); gm().xxx().xxx() 这样基本上能实现很多功能了,如(剪裁、缩放、旋转等等),但是调用子类报错var imageMagick = gm.subClass({ imageMagick: true });应该是没装ImageMagick ,而且涉及到中文输出的一概乱码,网上翻遍了,试了很多,都不行。 今天想着安装ImageMagick 碰碰运气,还真就行了。但得用子类方法。 原先: var gm = require(‘gm’); gm(300,300,‘green’) .font(‘stliti’)//中文字体已写在配置文件中 .fontSize(50) .drawText(10, 150, ‘ABC验证码’) .write(“D:\node\gmtest\a1.jpg”,function(err) { if (err) console.log(err); }); 这样就算安装了ImageMagick 也是乱码。

改后: var gm = require(‘gm’); var imageMagick = gm.subClass({ imageMagick: true }); imageMagick (300,300,‘green’) .font(‘stliti’)//中文字体已写在配置文件中 .fontSize(50) .drawText(10, 150, ‘ABC验证码’) .write(“D:\node\gmtest\a1.jpg”,function(err) { if (err) console.log(err); }); 这样就能正常输出中文了。

其实,可以只安装ImageMagick 就行了的。但gm().xx().xx()的这些方法就不能用了,要通过子类调用var imageMagick = gm.subClass({ imageMagick: true });

以上就是整个问题的过程。

Nodejs GM中文乱码如何解决?

在使用gm库处理中文文本时,可能会遇到中文乱码的问题。这是因为默认情况下字体文件没有正确设置或字体文件本身不支持中文字符。

示例代码

首先确保你的系统中有合适的中文字体文件(例如 simhei.ttf)。然后按照以下步骤进行设置:

const gm = require('gm').subClass({ imageMagick: true });

gm(300, 300, '#ff0000')
  .font('path/to/simhei.ttf', 50) // 替换为你的中文字体文件路径
  .fill('#000000') // 设置字体颜色
  .drawText(10, 150, 'ABC验证码')
  .write("D:\\node\\gmtest\\a1.jpg", function(err) {
    if (err) console.log(err);
  });

解释

  1. 字体路径

    • font('path/to/simhei.ttf', 50):确保字体路径是正确的,并且字体文件支持中文字符。你可以将字体文件放在你的项目目录中,并提供相应的路径。
  2. 颜色设置

    • fill('#000000'):设置字体颜色为黑色。你可以根据需要调整颜色。
  3. 写入文件

    • write("D:\\node\\gmtest\\a1.jpg", function(err) { ... }):指定输出图片的路径和文件名,并在回调函数中处理可能的错误。

通过以上设置,你应该能够避免中文乱码问题,并成功生成包含中文文本的图片。

回到顶部