nodejs转换图片报: this most likely means the gm/convert binaries can't be found 错误

  |   0 评论   |   0 浏览

背景

通过nodejs自定生成图片,在图片上面绘制上 日期星期

其中用到了 gm依赖,因此需要安装GraphicsMagick或者ImageMagick

index.js 代码如下:

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

var datetime = moment().format("YYYY年MM月DD日");
var datetime2 = moment().format("YYYY-MM-DD");

var basePath="/opt/test/"

gm(basePath+"/tmp.png")      //指定添加水印的图片
    .stroke("#EFF6EC")          //字体外围颜色
    .fill("#EFF6EC")                    //字体内围颜色(不设置默认为黑色)
    .font(basePath+"/FZYTK.TTF",60)
    .drawText(630,180,getWeek())
    .font(basePath+"/FZYTK.TTF",35)
    .drawText(640,240,datetime)
    .write(basePath+"/icon-"+datetime2+".png", function (err) {
            console.log(err)
            if (!err) console.log('ok');
            else console.log(err);
        });



function getWeek() { // 参数时间戳
      let week = moment().day()
      switch (week) {
        case 1:
          return '星期一'
        case 2:
          return '星期二'
        case 3:
          return '星期三'
        case 4:
          return '星期四'
        case 5:
          return '星期五'
        case 6:
          return '星期六'
        case 0:
          return '星期日'
      }
    }

安装ImageMagick和GraphicsMagick

ImageMagick

  • 安装基础依赖

    yum install -y tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel
    
  • 下载

    https://www.imagemagick.org/download/ImageMagick.tar.gz
    
  • 解压

    tar -zxvf ImageMagick.tar.gz
    
  • 安装

    ./configure
    make && make install
    ldconfig /usr/local/lib
    
  • 测试

    convert -version
    

GraphicsMagick

  • 安装基础依赖

    yum install -y libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel jasper jasper-devel
    
  • 下载最新版

    wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/GraphicsMagick-LATEST.tar.gz
    
  • 解压

    tar GraphicsMagick-LATEST.tar.gz
    
  • 进入目录
    这里可能你下载的版本和我这里不一样,解压后,根据自己的目录进入

    cd GraphicsMagick-1.3.38
    
  • 安装

    ./configure
    make
    make install
    
  • 测试

    gm version
    

建立软连接

注意:这里很重要,我的坑就是掉这里;直接执行node生成的时候是可以的,一旦通过定时任务去执行的时候,就会报找不到gm的错误

ln -s /usr/local/bin/gm /usr/bin/gm
ln -s /usr/local/bin/convert /usr/bin/convert

问题

正常手动执行node命令生成,就没有问题,能正常生成

node index.js

但是,一旦通过定时任务去执行的时候

就会报找不到gm/convert: this most likely means the gm/convert binaries can't be found

 如遇图片加载失败,可尝试使用手机流量访问

解决方式

  • 问题一;ImageMagick和GraphicsMagick没有安装成功
    这个问题,可以根据上面的安装流程进行确认

  • 问题二,没有建立软连接
    我遇到的就是这个情况,软件都安装成功,直接执行时可以正常,唯独定时任务执行时无法成功
    最后在这里找到了解决方式:https://github.com/aheckmann/gm/issues/455 需要建立软连接

    ln -s /usr/local/bin/gm /usr/bin/gm
    ln -s /usr/local/bin/convert /usr/bin/convert
    

    建立成功之后,就能通过定时任务的方式去生成图片了;