给爱知乎添加拼图模式(mosaic mode)
博客: http://之前 爱知乎 的 日历页面 采用的封面视图,每天的封面用的是当天内容的最后一张图片,今天突发奇想用当天所有的图片来拼成封面。
因为没有降低图片质量,所以现在加载日历页面的图片会比之前慢不少……
<!-- more -->
因为是免费托管在 京东的JAE上 ,所以采用GraphicsMagick之类作为后端的module都被排除了,不然我会使用 gm ,于是我使用了国人开发的 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 + " ======");
}
});
});
}