ここで使用されるテクノロジーは次のとおりです。
まず、体験リンク g.cuggz.com/ にアクセスしてください。 注:上記のリンクをクリックして使用できますが、私のドメイン名はTXによってブロックされており、まだ異議申し立て中であるため、QQまたはWeChatで開くことはできません。表示して使用するには、リンクをブラウザにコピーする必要があります。 ガジェットのスクリーンショットは次のとおりです。 1. ページレイアウトこの部分についてはあまり説明しません。コードに直接進みます。 <div class="wrapper"> <!-- ボックスを選択 --> <div class="main-box"> <a class="prev" onClick='changeHat()'></a> <div class="main-img"> <div id="コンテンツ"> <キャンバスid='cvs'></キャンバス> </div> </div> <a class="next" onClick='changeHat()'></a> </div> <!-- グラフをエクスポート --> <img id='export-img' alt='建国記念日限定アバター' src='' crossorigin="anonymous"/> <!-- アクション ボタン --> <div class="操作-btns"> <a class="upload-btn"> <input id='upload' type='file' onchange='viewer()' style='opacity: 0;'/> </a> <a class="export-btn" onClick='exportFunc()'></a> </div> </div> <!-- テンプレート --> <div スタイル = '表示: なし'> <img id='img' src='' alt='' /> <img class='hide' id='hat0' src='img/1.png' /> <img class='hide' id='hat1' src='img/2.png' /> <img class='hide' id='hat2' src='img/3.png' /> <img class='hide' id='hat3' src='img/4.png' /> <img class='hide' id='hat4' src='img/5.png' /> <img class='hide' id='hat5' src='img/6.png' /> <img class='hide' id='hat6' src='img/7.png' /> </div> このページは比較的シンプルです。外側に大きな背景画像があり、真ん中にアバター表示ボックスとテンプレート切り替えボタン、その下にアップロードボタンとダウンロードボタンがあります。ページレイアウトが完了したら、スタイルを記述します。CSSコードは次のとおりです。 体、 html{ 最小高さ: 100%; 幅: 100%; ユーザー選択: なし; フォントサイズ: 18px; } .ラッパー{ 幅: 100%; 高さ: 100%; 最大幅: 620px; 最大高さ: 800px; マージン: 0 自動; 背景画像: url('../img/bg.png'); 背景繰り返し: 繰り返しなし; 背景サイズ: 100% 100%; パディングトップ: 13em; } #エクスポート画像{ 表示:なし; マージン:0 自動; 幅:250px; 高さ:250px; } .メインボックス{ ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; } .メインボックス.next, .メインボックス.前へ{ 背景画像: url('../img/next.png'); 背景サイズ: 含む; 境界線の半径: 50%; 幅: 2.275rem; 高さ: 2.275rem } .メインボックス.前へ{ 変換: 回転(180度) } .メインボックス .メイン画像 { マージン: 0.75rem; 背景: #fff; 境界線: .25rem 実線 #fbe6b5; 境界線の半径: .75rem; フォントサイズ: 0 } #コンテンツ { 境界線の半径: .5rem; 位置: 相対的; 幅:9.5rem; 高さ:9.5rem; 左マージン: 50%; 変換: translateX(-50%); オーバーフロー: 非表示 } .操作ボタン{ ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの中央揃え: 中央; flex-direction: 列; 上マージン: .75rem } .操作ボタン .アップロードボタン { 幅: 11.6rem; 高さ:3.6rem; 背景サイズ: 100% 100%; 背景画像: url('../img/upload.png') } .操作ボタン .エクスポートボタン { 表示: なし; 幅: 11.6rem; 高さ:3.75rem; 背景サイズ: 100% 100%; 背景画像: url('../img/export.png') } ここでは、参考のために簡単な実装を示します。最適化できる領域はまだたくさんありますが、ここでは変更しません。興味のある方は自分でカスタマイズできます。 2. 画像のアップロードと表示次のステップはロジック部分を実装することです。まず、後で使用するグローバル変数をいくつか定義する必要があります。 let canvasFabric; // Canvas インスタンス let hat = "hat0"; // 現在のテンプレートクラス let hatInstance; // テンプレート レイヤー インスタンス const screenWidth = document.getElementById("content").scrollHeight; // コンテンツ ボックスの高さ その後、アップロードされた画像を処理してページに表示する必要があります。 関数ビューア() { // アップロードされた画像ファイルを取得します。const file = document.getElementById("upload").files[0]; // 画像を表示するために必要なタグを取得します。const img = document.getElementById("img"); // ファイルオブジェクトを読み取るためのファイルを作成します。const reader = new FileReader(); if (ファイル) { //ファイルをBase64に変換する reader.readAsDataURL(ファイル); // ファイルが正常に読み込まれたときにトリガーされます reader.onload = () => { // 画像を表示するタグに base64 URL を割り当てます。img.src = reader.result; // 画像の読み込み完了トリガー img.onload = () => img2Cvs(img); } } それ以外 { 画像ソース = "" } } ここでは、ファイルを読み取るためのメソッドと読み取り結果を含むイベント モデルを提供する
つまり、アップロードされた画像は これで画像のアップロードと表示は完了です。次はキャンバスを初期化します。 3. キャンバスを初期化する上記コードの最後で、img.load が実行されます。ここでの onload イベントは、画像が読み込まれた直後に実行されます。画像が表示された後、img2Cvs メソッドが実行されます。このメソッドは主にキャンバスを初期化し、ページの一部の要素を表示および非表示にするために使用されます。
fabric.js ライブラリは npm コマンドでインストールできます。 npm インストール ファブリック --save CDN 経由で参照することもできます: <script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.6/fabric.min.js"></script>
関数 img2Cvs(img) { // キャンバスを取得して表示し、キャンバスのサイズを画像のサイズに設定します。const cvs = document.getElementById("cvs"); cvs.width = img.width; cvs.height = img.height; cvs.style.display = "ブロック"; // キャンバスを作成し、その位置と背景画像を設定します。canvasFabric = new fabric.Canvas("cvs", { 幅: 画面幅、 高さ: 画面幅、 背景画像: 新しい fabric.Image(img, { スケールX: 画面幅 / 画像幅、 スケールY: 画面幅 / 画像の高さ }) }); // スイッチテンプレート changeHat(); // 画像のアップロードボタンを非表示にして、画像のダウンロードボタンを表示します。 document.getElementsByClassName("upload-btn")[0].style.display = "none"; document.getElementsByClassName("export-btn")[0].style.display = "ブロック"; } ここでの キャンバスを作成したら、最初のテンプレートに切り替えて、画像のアップロードボタンを非表示にし、アバターのダウンロードボタンを表示する必要があります。これで最初のステップは完了です。それでは、既存のテンプレートを切り替える方法を見てみましょう。 4. テンプレートを切り替える次に、テンプレートを切り替える方法を見てみましょう。 関数changeHat() { // 現在のテンプレートを非表示にします document.getElementById(hat).style.display = "none"; // すべてのテンプレートを取得します。const hats = document.getElementsByClassName("hide"); hat = "hat" + (+hat.replace("hat", "") + 1) % hats.length; // 現在のテンプレートを取得して表示します const hatImage = document.getElementById(hat); hatImage.style.display = "ブロック"; // レイヤーがすでに存在する場合は削除します if (hatInstance) { キャンバスファブリックを削除します。 } // 現在のテンプレートをレイヤーオブジェクトとして追加する hatInstance = new fabric.Image(hatImage, { 上: 0, 左: 0, スケールX: スクリーン幅 / ハットイメージ幅、 スケールY: screenWidth / hatImage.height、 コーナーカラー: "#0b3a42", コーナーストロークカラー: "#fff", コーナースタイル: "円", transparentCorners: false、 回転ポイントオフセット: 30 }); // レイヤーオブジェクトを非伸縮可能に設定する hatInstance.setControlVisible({ mt: 誤り、 mb: 偽、 ml: 偽、 mr: 間違いです、 bl: 誤り、 br: 誤り、 tl: 誤り、 tr: 偽、 mtr: 偽、 }) // レイヤーをキャンバスに追加します canvasFabric.add(hatInstance); } デフォルトでは、fabric.js 要素には、任意のオブジェクトを拡大縮小するための 8 つのポイントがあります。ここでは、ユーザーが 最後に、テンプレートによって生成されたレイヤーをキャンバスに追加します。ここでは、fabric によって提供されるイベントである add メソッドを使用します。以下は、fabric.js によって公式に提供される一般的なイベントです。
5. 画像を出力する上記の手順を実行すると、キャンバスが初期化されます。キャンバスの背景は、アップロードした画像です。キャンバスには、選択したテンプレートのレイヤーもあります。最後のステップは、合成した画像を出力することです。 「画像のダウンロード」ボタンをクリックすると何が起こるか見てみましょう。 関数 exportFunc() { // 選択ボックス、アップロードおよびダウンロード ボタン、キャンバスを非表示にします。 document.getElementsByClassName("main-box")[0].style.display = "none"; document.getElementsByClassName("operation-btns")[0].style.display = "なし"; document.getElementById("cvs").style.display = "なし"; // キャンバスから URL を生成し、表示用の対応するタグに割り当てます。const exportImage = document.getElementById("export-img"); exportImage.style.display = "ブロック"; exportImage.src = canvasFabric.toDataURL({ 幅: 画面幅、 高さ: 画面幅 }); // 生成された画像をダウンロードします window.confirm("アバターをダウンロードしますか") ? download(exportImage.src, "ナショナルデーアバター", 'image/png') : void 0 } ここでは、キャンバス インスタンス オブジェクトから画像を生成するために 最後に、生成されたアバターをダウンロードするためのオプション機能が追加されます。ここでは これらはすべて、この小さなアプリケーションの機能です。これは単純な実装であり、まだバグがあります。主に実装のアイデアを提供します。これまでキャンバスの概念に触れたことがなかったので、今回は多くのことを学びました。今後時間があるときに、その使い方についてもっと詳しく学んでみたいと思います。 これで、建国記念日、JS を使用して建国記念日風のアバターを生成するツールを実装する方法、および詳細な実装プロセスに関するこの記事は終了です。JS を使用して建国記念日風のアバターを生成することに関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker Tomcat のアクセス インターフェイスが表示されないのはなぜですか?
コンポーネントが詳細になるにつれて、複数のコンポーネントが状態を共有する状況に遭遇するでしょう。Vu...
CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...
概要Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカ...
1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...
最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...
今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...
要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...
この記事では、MySQL データベースの一般的な操作テクニックをまとめます。ご参考までに、詳細は以下...
背景今日、他のプロジェクト チームと協力してシステムのストレス テストを実施しているときに、プロ...
目次1. 需要2. データベース設計3.Javaバックグラウンド構成の実装4. WeChatアプレッ...
目次1. 概要2. 応用例2.1、Docker コンテナ分離名前空間2.2. Docker のフリー...
この記事では、呼吸カルーセル効果を実現するためのjQueryの具体的なコードを参考までに共有します。...
この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介し...
テキスト非表示コード、HTML 内の特定のテキストを非表示にするコードをコピーコードは次のとおりです...
目次1. 問題2. 解決策オプション1:オプション2: 1. 問題この話は、エラーと脱落率を照会する...