Facebook小游戏分享图接口base64Picture

fb_game

Facebook小游戏分享接口主要有两种:

1. FBInstant.shareAsync

可以自定义标题、分享图、传参等,发布动态,没有分享回调。

2. FBInstant.context.chooseAsync

准确说是“与好友一起玩”,切换游戏环境,有分享回调。如果要推送消息给好友,需要配合FBInstant.updateAsync进行调用。

Facebook中关于分享图的选取,必须传入base64格式字符串,而不允许传入imageUrl。有两种思路,一是程序中借助canvas,动态将图片资源生成对应的base64数据,如下:

var GetBase64Image = function (imageUrl, callback)
{
  function getBase64(img) 
  {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, img.width, img.height);
    var dataURL = canvas.toDataURL();
    canvas = null;
    return dataURL;
 }

  var image = new Image();
  image.src = imageUrl;
  image.setAttribute('crossOrigin', 'anonymous');
  image.onload = function(){
  var base64 = getBase64(image);
    console.log("[GetBase64Image] 2", base64);
    callback(base64);
  }
};

另一种,直接加载转换好的base64图片数据,省去动态转换过程,理论上更好些。提供个批处理:

const fs = require('fs');
const path = require('path');
const mineType = require('mime-types');
let origin = "./base64_images/";
let target = "./base64_json/";
let index = 0;

fs.readdir(origin, (err, files) => {
  files.forEach(file => {
  index++;
  console.log(">> " + file);
  var file_name = file.split(".")[0];
  let filePath = path.resolve(origin + file);
  let data = fs.readFileSync(filePath);
  var base64Img = data.toString('base64');
  base64Img = "data:image/jpg;base64," + base64Img;
  fs.writeFileSync(target + file_name + ".json",     JSON.stringify({"imageData": base64Img}));
  });

  console.log("count: " + index, "\nDone!");
});

具体实例可参考:

https://github.com/pury/SPTools/tree/master/image2base64data

By Pury.