node+百度SDK实现图片增强特效

node+百度SDK实现图片增强特效

百度AI开放平台官方文档](http://ai.baidu.com/docs)
此处示例为 图片增强 人像动漫化
效果:

关键代码

// var AipImageProcessClient = require("baidu-aip-sdk").imageProcess;
// var client = new AipImageProcessClient(APP_ID, API_KEY, SECRET_KEY);
const { imageProcess } = require("./src/index.js");

var fs = require("fs");
// 设置APPID/AK/SK
var APP_ID = "APP_ID ";
var API_KEY = "API_KEY ";
var SECRET_KEY = "SECRET_KEY ";

var client = new imageProcess(APP_ID, API_KEY, SECRET_KEY);

// 批量
let images = []; // 获取assets下的所有文件
const imgFiles = fs.readdirSync("./assets");
imgFiles.forEach(function (item, index) {
  var image = fs.readFileSync(`./assets/${item}`).toString("base64");
  animeEnhance(image);
});

// 调用图像动漫化
function animeEnhance(image) {
  options = [{ type: "anime" }, { mask_id: 3 }];
  client
    .animeEnhance(image, options)
    .then(function (result) {
      toImg(result.image);
    })
    .catch(function (err) {
      // 如果发生网络错误
      console.log(err);
    });
}

// base64转化为图片
function toImg(str) {
  const base64 = str.substr(0, str.length - 1);
  var dataBuffer = new Buffer(base64, "base64"); //把base64码转成buffer对象,
  console.log("dataBuffer是否是Buffer对象:" + Buffer.isBuffer(dataBuffer));
  //用fs写入文件
  fs.writeFile(`${new Date().getTime()}.png`, dataBuffer, function (err) {
    if (err) {
      console.log(err);
    } else {
      console.log("写入成功!");
    }
  });
}

  const ANIME_PATH = '/rest/2.0/image-process/v1/selfie_anime';
  animeEnhance(image, options) {
        let param = {
            image: image,
            targetPath: ANIME_PATH
        };
        return this.commonImpl(objectTools.merge(param, options));
    }

遇到的问题:

1.引入官方的类之后报错不是构造函数

解决:require("baidu-aip-sdk").imageProcess 此处的Process应为大写,官方为小写实际是错误的

2.正确引入类实例化之后还是不可以使用人像动漫化

解决:git上的文件并没有更新人像动漫化这个函数,自己写一个添加到imageProcess 类中,上文已经写好

3.成功获取之后返回的base64码太大,以及如何使用

解决:之前使用fs模块试着输出了一下,一个base64直接占用700k+的空间,写入记事本打开都会卡死,之后选择直接转化输出

4.解决base64转化图片

解决:文中提供了转化函数

5.批量化处理

解决:文中提供批量处理函数

6.批量处理的时候不是所有的图片都会转化成功
未解决

愿以往所学皆有所获
原文地址:https://www.cnblogs.com/Azune/p/14470716.html