Ich experimentiert ein wenig mit dem Canvas-Element und war neugierig, wie man einen Effekt abzieht.Wie man ein Bild mit Leinwand und Javascript pixelate
Ich habe etwas, was ich suche aus einer Sammlung von Tutorials und Demos, aber ich brauche etwas Hilfe, um den Rest des Weg dorthin zu bekommen. Was ich suche, ist ein Bild auf mouseover
Pixelieren, dann refocus/un-pixelate es auf mouseout
. Sie können ein gutes Beispiel für den Effekt bei http://www.cropp.com/ sehen, wenn Sie die Blöcke unterhalb des Hauptkarussells bewegen.
Hier ist ein link to a fiddle Ich begann. Die Geige funktioniert nicht, weil du keine domänenübergreifenden Bilder verwenden kannst (womp womp), aber du kannst meinen Code bis jetzt sehen. Wenn ich über mein Leinwandobjekt mische, kann ich das Bild verpixeln, aber es ist irgendwie umgekehrt zu dem, was ich zu bekommen versuche. Jede Hilfe oder Beratung wäre sehr willkommen.
var pixelation = 40,
fps = 120,
timeInterval = 1000/fps,
canvas = document.getElementById('photo'),
context = canvas.getContext('2d'),
imgObj = new Image();
imgObj.src = 'images/me.jpg';
imgObj.onload = function() {
context.drawImage(imgObj, 0, 0);
};
canvas.addEventListener('mouseover', function() {
var interval = setInterval(function() {
context.drawImage(imgObj, 0, 0);
if (pixelation < 1) {
clearInterval(interval);
pixelation = 40;
} else {
pixelate(context, canvas.width, canvas.height, 0, 0);
}
}, timeInterval);
});
function pixelate(context, srcWidth, srcHeight, xPos, yPos) {
var sourceX = xPos,
sourceY = yPos,
imageData = context.getImageData(sourceX, sourceY, srcWidth, srcHeight),
data = imageData.data;
for (var y = 0; y < srcHeight; y += pixelation) {
for (var x = 0; x < srcWidth; x += pixelation) {
var red = data[((srcWidth * y) + x) * 4],
green = data[((srcWidth * y) + x) * 4 + 1],
blue = data[((srcWidth * y) + x) * 4 + 2];
for (var n = 0; n < pixelation; n++) {
for (var m = 0; m < pixelation; m++) {
if (x + m < srcWidth) {
data[((srcWidth * (y + n)) + (x + m)) * 4] = red;
data[((srcWidth * (y + n)) + (x + m)) * 4 + 1] = green;
data[((srcWidth * (y + n)) + (x + m)) * 4 + 2] = blue;
}
}
}
}
}
// overwrite original image
context.putImageData(imageData, xPos, yPos);
pixelation -= 1;
}
Ihre Geige aktualisiert, um ein tatsächliches Bild zu haben, über eine Daten-URL: http://jsfiddle.net/xDt7U/1/ – Chad