在node.js中使用GM裁剪为带圆圈的图像

时间:2015-06-09 22:10:01

标签: javascript node.js image imagemagick

我已经使用express 4创建了一个上传图像功能,我希望在此过程中为上传的图像创建几种不同的尺寸和形状。

    mkdirp(smallPath, function (err) {
    if (err) {
        console.error('resizeImg err='+err+']');
        return;
    } else {
      gm(basePath+'/original/'+image)
        .resize(35, 35)
        .noProfile()
        .write(smallOutputFilePath, function (err) {
          if (err) console.log(err);
        });
    }

现在,我想要将这个35x35图像裁剪成带圆圈的透明背景。像这样: enter image description here

我发现了类似的问题:Rounded corner using gm in nodejs。但答案使用命令行ImageMagick,我想使用 gm方法和功能。有谁知道如何解决它?

1 个答案:

答案 0 :(得分:2)

过了一会儿,我决定迁移到伟大的node-easyimage。它为我提供了更大的灵活性,并允许我重现我的命令行,利用回调成功和错误响应。

function resizeImageToSize(path, size, outputTempFilePath, outputFilePath) {
easyimg.exec('convert '+path+' -resize ' +
  (size) + 'x' + (size) + '^  -gravity center -crop ' +
  (size) + 'x' + (size) + '+0+0 +repage '+outputTempFilePath).then(
  function(file) {

    easyimg.exec('convert '+outputTempFilePath+' \\( -size ' +
      (size) + 'x' + (size) + ' xc:none -fill white -draw "circle ' +
      (size / 2) + ',' + (size / 2) + ' ' + (size / 2) + ',0" \\) -compose copy_opacity -composite '+
      outputFilePath).then(
      function(file) {
        fs.unlink(outputTempFilePath, function (err) {
          if (err) {
            console.log(err);
          }
        });
      }, function (err) {
        console.log(err);
      }
    );
  }, function (err) {
    console.log(err);
  }
);}

imagemagick插件确实已弃用