给爱知乎添加拼图模式(mosaic mode)
发布于 8个月前 作者 nihgwu 559 次浏览

博客: http://liteneo.com/2014/06/23/mosaic-mode/

之前 爱知乎日历页面 采用的封面视图,每天的封面用的是当天内容的最后一张图片,今天突发奇想用当天所有的图片来拼成封面,于是现在变成了这样:

mosaic mode

因为没有降低图片质量,所以现在加载日历页面的图片会比之前慢不少……

因为是托管在 [JAE](http://jae.jd.com) ,所以采用**GraphicsMagick**之类作为后端的module都被排除了,不然我会使用 [gm](https://github.com/aheckmann/gm) ,于是我使用了国人开发的 [images](https://github.com/zhangyuanwei/node-images),使用起来非常简单,虽然还有些问题,不过能满足我的需求。

附上代码:

function mosaic(json) {
  var size = Math.floor(Math.sqrt(json.news.length));
  if (size > 6)size = 6;
  var length = size * size;
  var width = 600 / size;
  var image = images(600, 600);
  var idx = 0;
  json.news.forEach(function (item, i) {
    if (i >= length) return;
    request.get(item.image, { encoding: null }, function (err, res, data) {
      if (err || res.statusCode != 200 || data.length < 1000) return;
      image.draw(images(data).size(width, width), i % size * width, Math.floor(i / size) * width);
      if (++idx == length) {
        fileUploader.uploadData(image.encode('jpg'), 'mosaic/' + json.date + '.jpg');
        log("====== mosaic: " + json.date + " ======");
      }
    });
  });
}
3 回复

看上去不错。Mark,回头来看。

昨晚回去看了。楼主写的不错,学习了。

回到顶部