所以我为自己创造的挑战就是这样。
我有一张源照片:
我正在映射颜色值并使用 div 创建它的像素化表示
结果如下:
我正在完成此操作的代码是:
'use strict';
var imageSource = 'images/unicorn.jpg';
var img = new Image();
img.src = imageSource;
var canvas = $('<canvas/>')[0];
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
var context = canvas.getContext('2d');
console.log('img height: ' + img.height);
console.log('img width: ' + img.width);
var pixelDensity = 70;
var timerStart = new Date();
for (var i = pixelDensity/2; i < img.height; i += (img.height/pixelDensity) ) {
$('.container').append($('<div class="row">'));
for(var j = pixelDensity/2; j < img.width; j += img.height/pixelDensity) {
var value = context.getImageData(j, i, 1, 1).data;
var colorValue = 'rgb(' + value[0] + ', ' + value[1] + ', ' + value[2] + ')';
$('.row:last').append($('<div class="block">').css({'background-color' : colorValue}));
}
}
var timerStop = new Date();
console.log(timerStop - timerStart + ' ms');
pixelDensity 变量控制颜色样本的接近程度。数字越小,样本越少,产生结果所需的时间就越少。随着数量的增加,样本会增加,并且功能会大大减慢。
我很想知道是什么让这件事花费了这么长时间。我看过稍微相似的项目——最著名的是Jscii——它们处理图像数据的速度要快得多,但我无法弄清楚提供额外性能的区别是什么。
谢谢你的帮助!