博客: http://liteneo.com/2014/06/23/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 + " ======");
}
});
});
}