鏡像効果を実現する JavaScript キャンバス

鏡像効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスでミラーイメージ効果を実現するための具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

<!DOCTYPE html>
<html>
    <ヘッド>
        <メタ文字セット="utf-8">
        <title>画像の使用</title>
        <スタイル タイプ="text/css">
            * {
                /* マージン: 0;
                パディング: 0; */
                ボックスのサイズ: 境界線ボックス;
            }
            キャンバス {
                /* 境界線の幅: 1px;
                境界線の色: #000000;
                境界線スタイル: solid; */
            }
        </スタイル>
    </head>
    <本文>
        <キャンバスid="キャンバス"></キャンバス>
        <canvas id="ミラー"></canvas>
        
        <div>
            <input type="file" accept="image/*" />
        </div>
        
        <script type="text/javascript">
            window.onload = (イベント) => {
                主要()
            }
            
            関数main() {
                定数キャンバス = document.getElementById("キャンバス");
                ミラーは document.getElementById("ミラー");
                const ctx = canvas.getContext("2d");
                定数 mirrorCtx = mirror.getContext("2d");
                
                定数 inputFile = document.querySelector("input[type=file]");
                inputFile.onchange = (イベント) => {
                    const ファイル = event.target.files;
                    ファイルの長さが 0 より大きい場合
                        const file = files[0]; // 最初のファイル
                        console.log(ファイル);
                        
                        定数image = 新しいImage();
                        image.src = URL.createObjectURL(ファイル);
                        image.onload = 関数(イベント) {
                            // console.log(イベント、これ);
                            URL.revokeObjectURL(this.src);
                            
                            キャンバスの幅 = 画像の幅;
                            キャンバスの高さ = 画像の高さ;
                            ミラーの幅 = 画像の幅;
                            ミラーの高さ = イメージの高さ;
                            
                            ctx.drawImage(画像, 0, 0);
                            
                            const 空の ImageData = ctx.createImageData(canvas.width, canvas.height);
                            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
                            
                            // console.log(getPixel(imageData, 0, 0));
                            // console.log(getPixel(imageData, 0, 5));
                            // console.log(getPixel(imageData, 0, 9));
                            // console.log(getColor(imageData, 0, 0, "R"));
                            // console.log(getColor(imageData, 0, 5, "G"));
                            // console.log(getColor(imageData, 0, 9, "B"));
                            
                            // コンソールログ(画像データ);
                            
                            // const uint8ClampedArray = imageData.data;
                            // uint8ClampedArray.length = imageData.width * imageData.height * 4;
                            コンソールにログ出力します。
                            for(h = 0; h < imageData.height; h++) {
                                for(let w = 0; w < imageData.width; w++) {
                                    const ピクセル = getPixel(imageData, h, imageData.width - w - 1);
                                    setPixel(空の画像データ、h、w、ピクセル);
                                }
                            }
                            mirrorCtx.putImageData(空のImageData, 0, 0);
                            
                            console.log(画像データ、空の画像データ);
                            
                            関数 getPixel(imageData, 行, 列) {
                                const uint8ClampedArray = imageData.data;
                                定数幅 = imageData.width;
                                定数height = imageData.height;
                                定数ピクセル = [];
                                for(i = 0; i < 4; i++) {
                                    ピクセルをpush(uint8ClampedArray[行 * 幅 * 4 + 列 * 4 + i]);
                                }
                                ピクセルを返します。
                            }
                            
                            関数setPixel(imageData, 行, 列, ピクセル) {
                                const uint8ClampedArray = imageData.data;
                                定数幅 = imageData.width;
                                定数height = imageData.height;
                                for(i = 0; i < 4; i++) {
                                    uint8ClampedArray[行 * 幅 * 4 + 列 * 4 + i] = ピクセル[i];
                                }
                            }
                            
                            // 関数 getColor(imageData, 行, 列, 色) {
                            // const ピクセル = getPixel(imageData, 行, 列);
                            // スイッチ(色) {
                            // ケース "R":
                            // ピクセル[0]を返します。
                            // ケース "G":
                            // ピクセル[1]を返します。
                            // ケース "B":
                            // ピクセル[2]を返します。
                            // ケース "A":
                            // ピクセル[3]を返します。
                            // }
                            // null を返します。
                            // }
                        }
                    }
                }
            }
        </スクリプト>
    </本文>
</html>

参考: リンク

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 画像の回転、マウスホイールのズーム、ミラーリング、画像切り替えの js コード

<<:  MySQLの詳細な説明Explain

>>:  Docker ベースの nginx ファイル サーバーを構築する方法と手順

推薦する

HTML でテーブルを分割および結合する (colspan、rowspan)

このコードは水平マージを示しています。 <!DOCTYPE html PUBLIC "...

Kylin V10 サーバーで Storm をコンパイルしてインストールする詳細なプロセス

1 はじめにApache Storm は、Hadoop と同様に、大量のデータを処理するために使用で...

Layuiテーブルは指定された行のラジオボタンを選択し、その行の実装コードまでスクロールします。

layui テーブルには複数行のデータがあります。外部入力コンテンツを通じて、指定された行を見つけ...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

Bootstrapグリッドの垂直および水平配置の詳細な説明

目次1. Bootstrap グリッドレイアウト2. 垂直方向の配置2.1 行タグの垂直方向の配置を...

Dockerサーバーのストレージリソースプール不足問題の解決

目次1. 問題の説明2. 問題分析3. 問題解決1. Dockerのディスク使用量を確認する2. 再...

MySQL のデータ削除とデータ テーブル メソッドの例

MySQL でデータやテーブルを削除するのは非常に簡単ですが、削除するとすべてのデータが消えてしまう...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...

MySQL における主キーが 0 であることと主キーの自己選択制約の関係についての詳しい説明 (詳細)

序文この記事は主にMySQLの主キー0と主キー自己排除制約の関係を紹介し、皆さんの参考と学習のために...

証明書を使用してリモート Docker サーバーに接続する方法

目次1. スクリプトを使用してDockerのTLSを暗号化する2. Dockerの設定を変更してリモ...

MySQL 高可用性クラスタの展開とフェイルオーバーの実装

目次1. 内閣府1. コンセプト2. MHAの構成3. MHAの特徴2. MySQL+MHAをビルド...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

虫眼鏡ケースのJavaScriptオブジェクト指向実装

この記事では、参考までに、虫眼鏡のJavaScriptオブジェクト指向実装の具体的なコードを紹介しま...

MySQL データベースの文字化け問題の原因と解決策

序文データベースのデータを表示すると、文字化けした文字が表示されることがあります。実際、どのようなデ...