現在、WeChatパブリックアカウントの運用活動が多く、写真を生成する必要があります。生成された写真は友達に送信され、友達の輪に広められ、製品の宣伝に役立ちます。 1.キャンバスを使用して画像を生成することもできますが、html2canvas というオープンソース ライブラリがすでに存在するため、時間を節約するために自分では作成しませんでした。 githubアドレス: html2canvas ライブデモ /** * window.devicePixelRatio に従ってピクセル比を取得します*/ 関数DPR() { (window.devicePixelRatio && window.devicePixelRatio > 1) の場合 { window.devicePixelRatio を返します。 } 1 を返します。 } /** * 渡された値を整数に変換します */ 関数parseValue(値) { parseInt(値、10)を返します。 }; /** * キャンバスを描く */ 非同期関数drawCanvas(セレクタ){ // 変換したい DOM ノードを取得します。const dom = document.querySelector(selector); DOM のスタイルを DOM に設定します。 // DOM ノードの計算された幅と高さ const width = parseValue(box.width); 定数height = parseValue(box.height); // ピクセル比を取得します。const scaleBy = DPR(); // カスタム キャンバス要素を作成します。 var canvas = document.createElement('canvas'); // キャンバス要素の属性の幅と高さを DOM ノードの幅と高さ * ピクセル比に設定します。canvas.width = width * scaleBy; キャンバスの高さ = 高さ * スケール; // キャンバス CSS の幅と高さを DOM ノードの幅と高さに設定します。canvas.style.width = `${width}px`; canvas.style.height = `${height}px`; // ブラシを取得します const context = canvas.getContext('2d'); // 描画されたすべてのコンテンツをピクセル比で拡大縮小します context.scale(scaleBy, scaleBy); x = 幅とします。 y = 高さとします。 戻り値 html2canvas(dom, {canvas}).then(function () { convertCanvasToImage(キャンバス、x、y) }) } /** * 画像をbase64形式に変換します*/ 関数 convertCanvasToImage(キャンバス, x, y) { image = new Image(); _container = document.getElementsByClassName('container')[0] とします。 _body = document.getElementsByTagName('body')[0] とします。 画像の幅 = x; 画像の高さをyに設定します。 image.src = canvas.toDataURL("image/png"); _body.removeChild(_container); document.body.appendChild(画像); 画像を返します。 } キャンバスを描画します('.container') 2.最近の携帯電話は画面が高画質なので、加工しないと画像がぼやけてしまいます。なぜぼやけてしまうのでしょうか?これにはデバイスのピクセル比が関係します。devicePixelRatio jsはデバイスのピクセル比を取得するためにwindow.devicePixelRatioを提供します。 関数DPR() { (window.devicePixelRatio && window.devicePixelRatio > 1) の場合 { window.devicePixelRatio を返します。 } 1 を返します。 } このDPR関数はデバイスのピクセル比を取得するために使用されます。ピクセル比を取得した後は何をすればよいでしょうか? var キャンバス = document.createElement('キャンバス'); // キャンバス要素の属性の幅と高さを DOM ノードの幅と高さ * ピクセル比に設定します。canvas.width = width * scaleBy; キャンバスの高さ = 高さ * スケール; // キャンバス CSS の幅と高さを DOM ノードの幅と高さに設定します。canvas.style.width = `${width}px`; canvas.style.height = `${height}px`; // ブラシを取得します const context = canvas.getContext('2d'); // 描画されたすべてのコンテンツをピクセル比で拡大縮小します context.scale(scaleBy, scaleBy); 3.デバイスのピクセル比を取得したら、canavs.width と canvas.height にデバイスのピクセル比 (scaleBy) を掛けます。このとき、canvas.style.width と canvas.style.height を dom の幅と高さに設定します。なぜこのように書くのか考えてみましょう。最後に、描画するときに描画内容のピクセル比率を倍に拡大します。 たとえば、iPhone 6S のデバイスの幅と高さは 375 x 667 で、6S の window.devicePixelRatio = 物理ピクセル / ディップ (2 = 750 / 375) です。デザイナーが通常提供するデザインは 750 x 1334 ですか? なので、ハイビジョンの画面で1:1の比率で描くとぼやけてしまいます。絵を見てください。6S DPR=2 6プラスDPR=3 4.最後に、canvas.toDataURL("image/png"); を呼び出し、それを image.src に割り当てます。WeChat は写真を保存できないため、写真ファイルを生成し、WeChat に組み込まれている長押し機能を呼び出して写真をアルバムに保存することしかできません。 モバイル H5 で JavaScript を使用して画像を生成するソリューションに関するこの記事はこれで終わりです。モバイル H5 で JavaScript を使用して画像を生成することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: mysql5.7 以降で my.ini を設定するための詳細な手順
>>: Linux で time(NULL) 関数と localtime() を使用して現在の時刻を取得する方法
この記事では、CSS ::markerの興味深い疑似要素を紹介します。これを使用すると、テキスト番号...
require メソッドの読み込みルールキャッシュからの読み込みを優先するコアモジュールパス形式のモ...
問題コードuseEffectによって発生したクロージャの問題コードを見てみましょう 定数 btn =...
入力ボックスには、コンテンツを入力するときに常に入力履歴が表示されます。これを無効にする現在の方法は...
この記事では、例を使用して MySQL カスタム関数の使用方法を説明します。ご参考までに、詳細は以下...
コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...
私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...
序文プロジェクトの要件は、ユーザーの現在の位置が特定の地理的位置範囲内にあるかどうかを判断することで...
目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...
この記事の例では、PC上で写真アップロード機能を実現するためのVueの具体的なコードを参考までに共有...
コードをコピーコードは次のとおりです。 <hr style="width:490px...
概要binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...
Web ページを作成するときに、クールでスムーズなドロップダウン メニューが必要になることがあります...
目次インストール構成よくある間違い事前テスト作業依存関係の扱いインスタンスとDOMを生成する要約する...
概要Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによっ...