スポンサーリンク

【JavaScript/Flask】PNG画像クリックで画像上の座標を取得する手順。

Flask
スポンサーリンク

今回の記事はFlask環境で作成したWebアプリ環境でブラウザ上で画像をクリックすることでブラウザ画面ではなく、画像上の座標を取得する手順についてご紹介します。

今回表示する画像は「svg」「png」画像にします。「jpg」の場合はpngの部分を置き換えるのみです。

また、私はJavaScript初心者ですので初心者にとって分かりやすいような解説になっていると思います。

では早速記事に進んでいきます。

スポンサーリンク

クリック用画像を表示させたFlaskプロジェクト作成

まずはFlaksプロジェクトです。こちらは簡単なので特に解説は入れません。
フォルダ構成は下記のようになっております。

├── app.py
├── static
│   ├── image
│   ├── test.png
│   └── test.svg
└── templates
    └── index.html

下記Flaskの記述のpythonコード

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/index")
def index():
    return render_template("index.html") # templatesフォルダ内のindex.htmlを表示する

if __name__ == "__main__":
    app.run()

次に画像表示ようのHTMLです。

<!DOCTYPE html>
<html lang="ja">

    <body>
        <svg onclick="mccl('svg_image')" width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg_image">
            <image id="diagram" href="../static/test.png" x="0" y="0" width="100" height="100"></image>
        </svg>

        <image id="test_svg_img" src="./static/test.svg" alt="GRAYCODE" onclick="mccl('test_svg_img')" width="100" height="100"></image>
        <image id="test_png_img" src="./static/test.svg" alt="GRAYCODE" onclick="mccl('test_png_img')" width="100" height="100"></image>
    </body>
</html>

SVGの画像表示は上記のSVGタグで囲んでイメージを表示するか、通常のImageタグで囲んで表示させるかの2通りがあります。今回クリックされたらの部分でonclickに関数をつかていますので後ほど解説していきます。

表示画像は下記のように画像が三つ並ぶはずです。画像は適宜好きなものにしてください。

ここまではFlaskの最も基本部分と、HTMLで画像を表示させるのみの処理なのでここまではおそらく問題なくで切ると思います。

では次にそのプロジェクトにJavaScriptを実装していきます。

画像クリックで画像上の座標を取得するJavaScript紹介

javascriptは直接HTML記述していきます。

<!DOCTYPE html>
<html lang="ja">

    <body>
        <svg onclick="mccl('svg_image')" width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg_image">
            <image id="diagram" href="../static/test.png" x="0" y="0" width="100" height="100"></image>
        </svg>
        <image id="test_svg_img" src="./static/test.svg" alt="GRAYCODE" onclick="mccl('test_svg_img')" width="100" height="100"></image>
        <image id="test_png_img" src="./static/test.svg" alt="GRAYCODE" onclick="mccl('test_png_img')" width="100" height="100"></image>

        <script>
            function mccl(idname){
                var s = document.getElementById(idname);
                var w0="100";//初期値
                var h0="100";//初期値
                w1 = s.getAttribute("width");//現在
                h1 = s.getAttribute("height");
                var r = s.getBoundingClientRect();
                var x=Math.round(event.clientX-r.left);
                var y=Math.round(event.clientY-r.top);
                x=Math.round(x*(w0/w1));
                y=Math.round(y*(h0/h1));
                //////ここ座標
                alert("x座標:" + x + " y座標:" + y);
            };
        </script>
    </body>
</html>

JavaSript部分の解説を行っていきます。

関数は引数をidにして動作するようにしております。初期にいろいろな計算がついておりますが、こちら画像の縮尺を変更させた際に縮尺を合わせるために作成しております。通常の画像ままの場合は特に気にする必要はありません。

上記のように表示がなされるはずです。

画像の中心部の座標は全てこれくらいの値になっているので、画像上の座標となっていることが確認できます。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Flask
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました