dポイントプレゼントキャンペーン実施中!

以下のJavaScriptですが、ファイルをtest.htmlの名前で保存して、同じデイレクトりにpic.jpg
を置いて、test.htmlをクリックして立ち上げると、window.onload のctx.drawImage(picImg, 0, 0);
までは上手くいって、元のpic.jpgはcanvasに表示されるのですが、何故か、var pixels = ctx.getImageData(0, 0, picImg.width, picImg.height);以降のJavaScript文が実行されません。(この部分で取り込んだpic.jpgの書き換えを行っています。)原因として何が考えられるでしょうか?

<html>
<head>
<title>List 5</title>
<script type = "text/javascript">
var picImg = document.createElement("img");
picImg.src = "pic.jpg";

window.onload = function() {
var ctx = document.getElementById("mycanvas").getContext("2d");
ctx.drawImage(picImg, 0, 0);
var pixels = ctx.getImageData(0, 0, picImg.width, picImg.height);
for(var y=0; y<pixels.height; y++) {
for(var x=0; x<pixels.width; x++) {
var r = pixels.data[(y * pixels.width + x) * 4]; // R
var g = pixels.data[(y * pixels.width + x) * 4 + 1]; // G
var b = pixels.data[(y * pixels.width + x) * 4 + 2]; // B
var gray = 0.298912 * r + 0.586611 * g + 0.114478 * b;
pixels.data[(y * pixels.width + x) * 4] = gray;
pixels.data[(y * pixels.width + x) * 4 + 1] = gray * 0.7;
pixels.data[(y * pixels.width + x) * 4 + 2] = gray * 0.4;
}
}
ctx.putImageData(pixels, 0, 0);
};
</script>
</head>
<body>
<canvas id="mycanvas" width="800" height="800"></canvas>
</body>
</html>

質問者からの補足コメント

  • http://localhost下で動きました。
    ありがとうございました。
    ちなみに、ご指摘のエラーはどのコマンドで見るこができるのでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/12/08 12:35

A 回答 (4件)

cross-origin dataのエラーっぽいです。


たぶんですが、ローカルで表示しているからではないかと思います。
ウェブサーバー上に置いた場合はどのようになりますでしょうか。

Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
at window.onload (test.html:11:18)
この回答への補足あり
    • good
    • 0

No.3:追記



Chromeでしたら、[F12]キーを押すか、表示エリアで右クリックして[検証]をクリックすると、デバッグ的なツールが表示できます。その[Console]にエラーが表示されます。変数の中身を見たり、ブレークポイントも付けられますので、HTML/CSS/JavaScriptのデバッグができます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/12/08 13:08

こんにちは



色の計算内容まで追いかけてはいませんが、セピア調に変換されればOKってことでしょうか?
試してみたところ、一応、動作するみたいです。

もしかすると、質問者様はローカル環境でテストしていませんか?
その場合は、画像のURLが file://~ となるため、cross-origin Data として扱われてエラーになるようです。

サーバ環境でテストすれば、動作するのではないかと想像します。
(計算結果が予定通りかどうかは、こちらではわかりません)
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/12/08 13:10

質問のプログラムを詳しく見たわけではありません。



JavaScriptは、他の言語とは違って、エラーがあっても、何もエラー表示など出さずに、ただそれ以降の処理をしないだけってことがよくあります。
どこまで正常に処理されているか?を確認し、処理されない箇所にエラーが無いか?を十分に確認されるのがいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/12/08 13:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!