Canvas で画像モノクロフィルタ
コードを書いた時間より、Web サーバにアップすると動くのにローカルで動かない理由が分からなくて首をひねっていた時間の方が長かったという. Firefox のセキュリティーポリシー謎すぎ・・・.
<html> <head> <title>Canvas</title> <script type="text/javascript"> window.onload = init; var img = new Image(); function init() { img.onload = filter; img.src = "test.jpg"; } function filter(){ netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); var canvas = document.getElementById("canvas1"); canvas.width = img.width; canvas.height = img.height; var context = canvas.getContext("2d"); context.drawImage(img, 0, 0); for(var y = 0; y < canvas.height; y++) { var s = context.getImageData(0, y, canvas.width, 1).data var dst = context.createImageData(canvas.width, 1) var d = dst.data for(var x = 0; x < canvas.width; x++) { var i = x * 4; var v = Math.floor(s[i] * 0.299 + s[i + 1] * 0.587 + s[i + 2] * 0.114 + 0.5); d[i] = d[i + 1] = d[i + 2] = v; d[i + 3] = 255; } context.putImageData(dst, 0, y); } } </script> </head> <body> <canvas id="canvas1"/> </body> </html>