私はキャンバス要素を少し試していて、効果を引き出す方法が不思議でした。キャンバスとJavaScriptで画像をピクセル化する方法
私はチュートリアルやデモのコレクションから探しているものを幾分得ていますが、残りの部分を手助けする必要があります。私が探しているのは、画像をmouseover
にピクセル化してから、mouseout
に再フォーカス/非ピクセル化することです。メインカルーセルの下にあるブロックをマウスで覆うと、http://www.cropp.com/の効果の良い例が見られます。
ここはlink to a fiddleです。あなたがクロスドメインイメージ(womp womp)を使用することはできないので、このフィーリングは機能しませんが、これまでのところ私のコードを見ることができます。私のキャンバスオブジェクトにマウスをかけるとイメージをピクセル化することができますが、それは私が得ようとしているものに逆らっています。どんな助けやアドバイスも大歓迎です。
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;
}
データURLを使用してフィーリングを実際のイメージに更新しました:http://jsfiddle.net/xDt7U/1/ – Chad