Also die Herausforderung, die ich für mich selbst erstellt habe, ist als solche.Javascript - Bilddatenverarbeitung und Div-Rendering
Ich habe eine Quelle Foto:
Source Photo http://f.cl.ly/items/012t1M250f0T101F2L0n/unicorn.jpg
Dass ich Farbwerte am Mapping und eine pixelig Darstellung davon mit divs
Hier ist das Ergebnis der Erstellung:
Der Code, mit dem ich das bewerkstellige, lautet:
'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');
Die Variable pixelDensity steuert, wie nahe die Farbmuster sind. Je kleiner die Zahl ist, desto weniger Proben werden benötigt, um weniger Zeit für das Ergebnis zu haben. Wenn Sie die Zahl erhöhen, werden die Samples erhöht und die Funktion verlangsamt sich erheblich.
Ich bin neugierig zu wissen, was dieses Ding so lange braucht. Ich habe mir etwas ähnliche Projekte angeschaut - vor allem Jscii - die die Bilddaten viel schneller verarbeiten, aber ich kann nicht herausfinden, was der Unterschied ist, der die zusätzliche Leistung bietet.
Danke für Ihre Hilfe!
Berühren Sie das DOM nicht, es sei denn, Sie müssen es tun. Erstellen Sie Ihr Offscreen-Objektmodell und hängen Sie es dann einmal an. Je mehr Samples, je mehr Divs, desto mehr Edits. Also, alles auf dem Bildschirm aufgebaut, alles auf einmal anhängen. –
Das war, was ich ursprünglich tat, aber ich fand, dass das Ziehen der Bilddaten das war, was die meiste Zeit nahm. Ich werde es nochmal versuchen, wenn ich den folgenden Ratschlag gebe. Danke für die Hilfe! – tylerdavis
Eine andere Sache. Wenn Sie versuchen, jede mögliche Leistung zu erzielen, hilft jede Kleinigkeit. Zwischenspeichern Sie Ihre for-Schleife-Bedingungen. 'für (var j = pixelDensity/2; j