鏡像効果を実現する 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 ファイル サーバーを構築する方法と手順

推薦する

固定ボトムコンポーネントを実装した Vue の例

目次【効果】 【実施方法】 【効果】 【実施方法】 <テンプレート> <div i...

CSS を使用してプログレスバーと順序プログレスバーを実装する例

この半月、期末試験の準備にかなりのエネルギーを費やしました。今日はしっかり復習するべきだったのですが...

Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

MySQL proxies_priv(シミュレートされたロール)を使用して同様のユーザーグループ管理...

IIS 7.5では、HTMLはSHTMLのようなinclude関数(モジュールマッピングの追加)をサポートします。

最初はたくさんのエラーを見つけましたが、実際には非常に簡単です。shtm の元の設定を参照するだけで...

Linux で iostat コマンドを使用するチュートリアル

序文運用・保守を行う人がスキルを持っていなければ、サーバーを操作するのに恥ずかしさを感じてしまうと言...

js が CSS 属性 (値) のサポートを決定して通知する状況の分析

新しい CSS 機能を使用する場合、その互換性は常に考慮されます。おそらく、その互換性、どのブラウザ...

VC6.0をWIN10にインストールすると使用できない問題の解決方法

VC6.0は確かに古すぎるVC6.0は昔の開発ツールです。現在のwin10では対応していません。しか...

VMware vSAN 入門概要

1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...

Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)

最近Ubuntu 20.04をインストールしましたが、Wi-Fiに接続できず、Wi-Fiアイコンも表...

MySql SQL最適化のヒントの共有

ある日、内部結合を含む SQL ステートメントの実行速度はそれほど遅くはない (0.1 ~ 0.2)...

Linux オペレーティング システムの概要と紹介

目次1. オペレーティングシステムとは何か2. Linuxの起源3. Linuxの基本機能4. Li...

Nginx の場所に関する一般的なルールの優先順位の問題

目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...

行間隔が広い場合の解決策(IE では 5 ピクセル多い)

コードをコピーコードは次のとおりです。 li {幅:300px; 高さ:23px; 行の高さ:24p...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明 Iframe ウェブペー...