html2canvas を使用して、Baidu マップを含む Dom 要素を画像に処理するソリューション

html2canvas を使用して、Baidu マップを含む Dom 要素を画像に処理するソリューション

問題 1: Baidu Map はタイル画像 (地図が写真で構成されている) を使用しています。html2canvas を使用して同じドメイン名にない画像を処理すると、ブラウザにクロスドメイン エラーが表示されます。タイル画像のドメイン名が不明で proxy_pass を指定できないため、リバース プロキシを使用しても解決できません。

解決方法:百度地図の静的画像処理(http://lbsyun.baidu.com/index.php?title=static)を使用する。このとき、ドメイン名が決定され(http://api.map.baidu.com)、リバースプロキシを使用してクロスドメインを解決できます。

<!--html-->
<el-image
:src="`/baidu-static/staticimage/v2?ak=yourak&width=1024&height=400¢er=${center.lng},${center.lat}&zoom=16`"
>
<div
  スロット="プレースホルダー"
  クラス="画像スロット"
>
  読み込み中...
</div>
</el-image>

<!--nginx-->
場所 ^~ /baidu-static/ {
add_header 'Access-Control-Allow-Origin' "$http_origin" 常に;
add_header 'Access-Control-Allow-Credentials' 常に 'true' を設定します。
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' 常に;
add_header 'Access-Control-Allow-Headers' 'Accept、Authorization、Cache-Control、Content-Type、DNT、If-Modified-
常に、Keep-Alive、Origin、User-Agent、X-Requested-With' が設定されます。
proxy_pass http://api.map.baidu.com/;
}

質問 2:マップ上にオーバーレイを表示するにはどうすればよいですか?

解決策: Baidu Map の静的画像 API を調べたところ、カスタム オーバーレイ スタイルがあまりサポートされていないことがわかりました。指定できるのはカスタム画像 (ローカル画像ではない) のみです。いろいろ試した結果、openLayers.Map を使うのが実現可能な方法だと思いました。しかし、コード修正の作業量が大きすぎたため、断念しました。その後、div を使用してオーバーレイを直接シミュレートし、静的レイヤー レベルよりも少し高いレベルに設定すると問題が解決すると考えました。

質問 3: CSS スタイルを使用して点線の円を描きました。生成された画像を html2canvas で処理したところ、点線が実線に変わったことがわかりました。

解決策: キャンバスを使用して円を描く

質問4:アイコンは絶対配置されていますが、html2canvasで処理された後、生成された画像にアイコンが表示されません。

解決策: アイコンの Z インデックスを Baidu の静止画像レベルよりも大きく設定します (PS: 静止画像のスタイルも絶対位置を使用します)

質問5: html2canvas処理後に生成された画像の背景色が黒色になります

解決策: image/png を image/jpg に変更する

試す {
  html2canvas(sharePage, {
    CORS の使用: true
  }).then((キャンバス) => {
    const imgBase64 = canvas.toDataURL('image/jpg')
    this.data64 = imgBase64
    })
  } キャッチ (エラー) {
}

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

<<:  レスポンシブレイアウトの概要(推奨)

>>:  JSはカリキュラムタイムテーブルアプレット(スーパーカリキュラムタイムテーブルを模倣)を実装し、カスタムバックグラウンド機能を追加します

推薦する

mysql ビュー関数の分析と使用例

この記事では、例を使用して MySQL ビューの機能と使用方法を説明します。ご参考までに、詳細は以下...

js 配列エントリ() 反復メソッドを取得する

目次1.entires() メソッドの詳細な構文2.entires() メソッドの一般的な使用法と注...

JavaScriptの強力な演算子をいくつか見てみましょう

目次序文1. ヌル合体演算子2. ??= 空代入演算子3. ?. オプション連鎖演算子4. ?: 三...

MySQLで更新可能なビューを作成する方法の詳細な説明

この記事では、例を使用して、MySQL で更新可能なビューを作成する方法について説明します。ご参考ま...

HTML チュートリアル: よく使われる HTML タグのコレクション (6)

関連記事:初心者が学ぶ HTML タグ (5)導入された HTML タグは、必ずしも XHTML 仕...

要素 DateTimePicker+vue ポップアップボックスに時間のみが表示される問題を解決する

3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...

テーブルの幅を固定して、テキストによって幅が変わらないように設定

ページ内のテーブルの幅を width="600px" に設定した後も、幅が固定さ...

カスタムスクロールバー効果を実現するJavaScript

実際のプロジェクトでは、上下のスクロール バーと左右のスクロール バーは DIV 内にないため、右の...

Linux で SVN サーバーをインストールする方法

1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...

MySQL 学習ノート: データ エンジン

現在のデータベースでサポートされているエンジンを表示します エンジンを表示 +-----------...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

MySQL 並列レプリケーションの簡単な分析

01 並列レプリケーションの概念MySQL のマスター スレーブ レプリケーション アーキテクチャで...

画像内のrarファイルを隠す方法

このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...

Linux システムのシャットダウンコマンドの違いと使い方の詳細な説明

Linux システムのシャットダウン コマンドは何ですか? Liangxu Tutorial Net...

JS配列の次元削減のいくつかの方法の詳細な説明

2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...