画像にグレースケールを施す処理が上手く行きません。
Canvasを利用した処理です。
画像の表示は正常に動いています。
よろしくお願い致します。
<!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id='board' width='200' height='300'> <script src="js/app.js"></script> </body> </html>
var canvas = document.getElementById('board'); if(canvas.getContext){ var ctx = canvas.getContext('2d'); } var img = new Image(); img.src = 'img/img01.jpg'; img.onload = function(){ ctx.drawImage(img, 0, 0); setTimeout(function(){ // 改めて画像として取得 let newImg = ctx.getImageData(0, 0, canvas.width, canvas.height); let data = newImg.data; // グレースケール化 for(let i=0,len=data.length; i<len; i+=4){ let color = (data[i] + data[i+1] + data[i+2]) / 3; data[i] = color; data[i+1] = color; data[i+2] = color; } // Canvas上に描画 ctx.putImageData(newImg, 0, 0); }, 3000); };
ローカル環境で試したところ、画像が3秒後にグレー表示されることを確認しました。
現在の問題が何なのか教えていただけますでしょうか?
グレー表示されない、ということでしたら、ブラウザのコンソールにエラーが表示されていないか確認をお願いします(F12キーを押すとコンソールが表示されるかと思います。)
cx20様、返信ありがとうございます。
「let newImg = ctx.getImageData(0, 0, canvas.width, canvas.height);」
Uncaught DOMException: The operation is insecure.
ブラウザはFireFoxです。
グーグル・クロームでは以下のようなエラーメッセージが表示されました。
Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D':
The canvas has been tainted by cross-origin data.
グレイスケール化の処理が正しくないように思われます。
R=data[1], G=data[2], B=data[3] だとすると、グレイスケールは下記の式で計算してください。
grayscale = 0.2989 * R + 0.5870 * G + 0.1140 * B;
回答1件
あなたの回答
tips
プレビュー