Html2canvas: 地図の画像を生成する際の問題Googleマップ

䜜成日 2014幎03月06日  Â·  51コメント  Â·  ゜ヌス: niklasvh/html2canvas

こんにちは、みんな。
ダむアログの画像を生成する必芁がありたす。

1

html2canvasを䜿甚しおいたすが、䜜成した画像に地図が衚瀺されたせん。

2

私のコヌド

            function imagem()
            {
                var html2obj = html2canvas($('#dialogPrint'));
                var queue  = html2obj.parse();
                var canvas = html2obj.render(queue);
                var img = canvas.toDataURL();
                window.open(img);
            };

助けが必芁です。
ありがずう

Needs More Information

最も参考になるコメント

グヌグルマップの新しいバヌゞョンでは、倉換が別のdivに適甚されおいるようです。 @GCorbelの゜リュヌションを䜿甚したすが、このセレクタヌ ".gm-style> divfirst> divfirst> divlast> div"を䜿甚するず機胜するようです。 ただ培底的にテストしおいたせんが。

党おのコメント51件

問題は、グヌグルマップがCSS3倉換行列を䜿甚しおいるこずです。これはhtml2canvasに完党には実装されおいたせん。

私はどのように行いたすか

Googleマップの画像倖郚サヌバヌの画像

プロキシを䜿甚する https 

brcontainer違法だず思いたす別のコンピュヌタヌ/ proxy /から盎接マップタむルにアクセスしたす。 唯䞀の方法はCORSを䜿甚するこずです。

@bkralikプロキシは、「ブロックされたサむト」にアクセスするためだけのものではありたせん。プロキシ甚語は、html2canvasのプロキシが、JavaScript APIがロヌカルサむトにあるかのように倖郚サヌバヌから画像を開くようにする堎合に備えお、別の意味を持ちたす。

プロキシはダりンロヌドされた倖郚サヌバヌを䜜成し、html2canvasはダりンロヌドが完了した埌にのみむメヌゞをロヌドしたす。

この䞻題を理解するには、このhttp://en.wikipedia.org/wiki/Same_origin_policyをお読み

このプロキシをどのように䜿甚したすか

プロキシの䜿甚ぞのすべおのリンクを䜿甚したリンクphp蚀語、Casp.net、python、VBaspクラシック。

プロキシぞのリンクに気付いおいないかもしれたせんが、ここで説明したす。
https://github.com/niklasvh/html2canvas/wiki/Proxies

新しいラむブラリを䜿甚する堎合は、README党䜓を読むこずをお勧めしたす。

@brcontainer私はこのプロキシが䜕をするか知っおいたす-クラむアントがペヌゞのスクリヌンショットを撮りたいずき、サヌバヌはすべおの写真をロヌカルフォルダにダりンロヌドし、クラむアントはそれらをロヌドしたす。 しかし、それは間違っおいたす-グヌグルは圌らのタむルサヌバヌの盎接䜿甚を蚱可しおいないので-そしお圌らの芳点から、誰かがりェブペヌゞを芋ずに突然倧量のタむルをサヌバヌにダりンロヌドしおいたす...

私はJavaを䜿甚しおいたす。
プロキシを䜿甚する䟋がありたすか

@brcontainerそしお、私が述べたように、Google Chromeで実行されおいるgooglemapsがCSS3倉換を䜿甚するため、CSS3倉換には本圓に問題があり、珟圚の実装ではマップをスクリヌニングできたせん。 私を信じおください、私が曞いたプロゞェクトでこの問題がありたした...

@bkralikでは、どうすればよいですか
䟋はありたすか

私もJavaでプログラミングしおいたすすでにPHP、C、VBでプロキシを䜜成しおいたすが、Javaでプロキシを䜜成するのに間に合わず、日曜日に䜜成できるかもしれたせん。

そのアプリケヌションはJSPたたは「JavaDesktop」ですか

@brcontainerこれは、JSF、Primefaces、Javascript、およびJavaを䜿甚するWebアプリケヌションです。

@DanielSBelo JSFフレヌムワヌク䜿甚したこずはありたせん。フレヌムワヌクを䜿甚せずに玔粋なJavaでプログラムしおいるので、Java郚分のコヌドで珟圚のコヌドを簡単に実装できるかどうかわかりたせん。 私は圌を助けたかったのですが、それは本圓にタむムリヌではありたせん。

[線集]
cssトランスフォヌムのサポヌトに぀いおは、 https  ください。

@DanielSBeloこれに察する良い解決策を芋぀けたしたか 私も同じ問題を抱えおいたす。

マップをキャンバスずしお保存するこずはFirefoxでは正垞に機胜したすが、Chromeでマップを保存するこずはできたせん。 倉換に盎接関係しおいるずは思いたせんが、ChromeがCORを凊理する方法である可胜性が高いです。 しかし、私は答えを芋぀けようずしお完党に立ち埀生しおいたす。

@TGOlson珟圚のリリヌスのhtml2canvasは「1レベル」の倉換しかレンダリングできないため、CSS3倉換には本圓に問題がありたす。぀たり、それらをスタックしたせん。
グヌグルマップで遊ぶだけで、問題が倉換にあるこずを確認できたす-通垞、次のようなスクリヌンショットが衚瀺されたす
map_2014-08-10_10-44-02
cssでは、マップ党䜓が正しく配眮されたすが、css3を無効にするず、これが発生したす
唯䞀の解決策は、css3倉換スタック党䜓を実装するこずです。 Niklasによっお進行䞭であるかどうかはわかりたせんが、誰かがそれを行う必芁がありたす:-)

賌読する

私も同じ問題を抱えおいたす-Chromeだけです。 私はhtml2canvas-proxy-phpを䜿甚しおいたす。 他のブラりザは正垞に動䜜したす。 マップの䞀郚が欠萜しおいるだけです。マップのサむズ倉曎、オヌバヌレむの远加/削陀などに関連しおいるようです。

参考たでに-マップキャプチャ機胜をすばやく起動しお実行する必芁がある堎合は、い぀でもGoogleストリヌトビュヌたたは静的マップAPIを䜿甚できたす。 基本的に、珟圚のナヌザヌが地図䞊で芋おいるもの map.getPovなどを再構築し、Googleからその静止画像を取埗したす。

このアプロヌチはオヌバヌレむでは機胜しないず思いたす

私はちょうどこの問題に出くわしたした。 私が間違っおいない堎合、このスタックオヌバヌフロヌの

var transform=$(".gm-style>div:first>div").css("transform")
var comp=transform.split(",") //split up the transform matrix
var mapleft=parseFloat(comp[4]) //get left value
var maptop=parseFloat(comp[5])  //get top value
$(".gm-style>div:first>div").css({ //get the map container. not sure if stable
  "transform":"none",
  "left":mapleft,
  "top":maptop,
})

おそらく、css3倉換をチェックしお、レンダリング䞭に通垞のCSSポゞショニングに自動的に倉換し、レンダリング埌にそれらを削陀するこずができたす。

画面キャプチャ機胜が䞀定しおいたせん。
ペヌゞを完党にリロヌドした埌に機胜したすFirefoxでCTLR + Rを䜿甚

これが私のコヌドです。基本的には、りィンドりのキャプチャされたprintsreenの64 base / png画像を生成し、最終結果をタグを付けお、機胜するかどうかを確認したす。

ここに機胜がありたす

関数ebfPrintScreencomponentName
{{
html2cavnas
[document.body]、
{{
ロギングtrue、
useCORStrue、
onrendered関数キャンバス
{{
img = canvas.toDataURL "image / jpg";

                                                  console.log(img.length);
                                                  console.log(img);

                                                  var imgComp = $c(conponentName);
                                                  imgComp.img.src = img

                                          }
                      }
                );

}

䞻な目的は、䜜成埌にグヌグルマップルヌトをキャプチャするこずですが、私が蚀うように、それが機胜する堎合ず機胜しない堎合がありたす。 䜕が起こっおいるのかに぀いおの手がかりはありたすか

私も同じ問題を抱えおいたす。 ズヌムやパンをした埌、地図の画像を撮りに行きたす。地図党䜓にさえ、突然薄茶色に芆われるようになりたす。 誰かがChromeでこれを修正した堎合は、私に知らせおください。

@mfirdausの゜リュヌションを詊し

@mfirdausの゜リュヌションを適甚した埌、マップビュヌをキャプチャするこずができたした。 しかし、どういうわけか、以䞋のこのコヌドはマップを䜿甚できなくしおいたすただし、html2canvasは䜿甚可胜です。

$(".gm-style>div:first>div").css({ //get the map container. not sure if stable
      "transform":"none",
      "left":mapleft,
      "top":maptop,
    })

その行が行っおいるこずを「埩元」する方法はありたすか 今のずころ、倉換コヌドを䜿甚せずにhtml2canvas関数を呌び出した埌、マップを機胜させるために、initMap関数を再床呌び出しおいたす。

䞊蚘のスクリプトはGoogleMaps v3で機胜したすか

私の芁件は、ルヌトが描かれたGoogle Mapv3のスクリヌンショットを撮るこずです。

Firefoxではうたく機胜したすが、Chromeにはマヌカヌやルヌトがありたせん。 私はすでにカスタムマヌカヌを䜿甚しおいたす。

コン゜ヌルに゚ラヌがなく、ロギングが非垞に制限されおいるため、デバッグに苊劎しおいたす。

Chromeで問題を解決した人はいたすか 2぀の蚀語でプロキシスクリプトを詊したしたが、どちらも違いがないようです。

私は同様の問題を抱えおいたす、私はむンタヌネットからこのコヌドをコピヌ/カットしたす

  if($.browser.safari) {// Fix for Chrome
    var transform=$(".gm-style>div:first>div").css("transform");
    var comp=transform.split(","); //split up the transform matrix
    var mapleft=parseFloat(comp[4]); //get left value
    var maptop=parseFloat(comp[5]);  //get top value
    $(".gm-style>div:first>div").css({ //get the map container. not sure if stable
      "transform":"none",
      "left":mapleft,
      "top":maptop,
    });
  }

  html2canvas([$("#map")[0]], {
    logging: false,
    useCORS: true,
    onrendered: function (canvas) {
      $('#screenshot').after(canvas);

      if($.browser.safari) {// Fix for Chrome
        $(".gm-style>div:first>div").css({
          left:0,
          top:0,
          "transform":transform
        });
      }
    }
  });

動䜜したすが、ハンドラヌを䜿甚しおマップを移動するず動䜜したせん。 マヌカヌやポリゎンなどを操䜜したす。Firefoxマップを移動できたすでも動䜜したすが、クロムでは動䜜したせん。

䜕か案が 

修理枈み 

私が愚かにコピヌ/貌り付けしたクロムの修正はトリガヌされたせんでした。

これは私がしたした 

  if(window.chrome) {// Fix for Chrome
    var transform=$(".gm-style>div:first>div").css("transform");
    var comp=transform.split(","); //split up the transform matrix
    var mapleft=parseFloat(comp[4]); //get left value
    var maptop=parseFloat(comp[5]);  //get top value
    $(".gm-style>div:first>div").css({ //get the map container. not sure if stable
      "transform":"none",
      "left":mapleft,
      "top":maptop,
    });
  }

  html2canvas([$("#map > div.g-map-canvas > div > div > div:nth-child(1)")[0]], {
    logging: false,
    useCORS: true,
    onrendered: function (canvas) {
      $('#screenshot').after(canvas);

      if(window.chrome) {// Fix for Chrome
        $(".gm-style>div:first>div").css({
          left:0,
          top:0,
          "transform":transform
        });
      }
    }
  });

html2canvasの非垞に長いセレクタヌは、ボタンやオプションのないマップを持぀ためのものです。

私は今働いおいたす、ありがずう。

ありがずう@GCorbelそれはあなたの゜リュヌションで非垞にうたく機胜したす。

䞊蚘の回避策はマップをレンダリングするために機胜したすが、䞊郚のコントロヌルがないか、間違った䜍眮にありたす。 䜕か案は

これはただv1.0.0の問題ですか もしそうなら、 jsfiddleで䟋を共有しお

この問題は、元の䜜成者からの詳现情報の芁求に察する応答がなかったため、自動的にクロヌズされたした。 珟圚問題になっおいる情報だけでは、行動を起こすのに十分な情報がありたせん。 さらに調査できるように、必芁な回答がある堎合はご連絡ください。

@niklasvhそれがただ最新バヌゞョンの問題であるこずを確認できたす。 これは、この問題のテスト䞭に䜜成したフィドルです http 

フィドルは、リンクされたスタックオヌバヌフロヌの質問で説明されおいる問題を瀺しおいたすが、必ずしもこのスレッドのOPにあるものではありたせん。 マップをパンしなくおも、マップをコピヌするのに問題はありたせん。 ChromeではFireFoxではなくマップをパンするず、コピヌされたマップは最初に読み蟌たれた領域の倖偎では空癜になりたす。

image

このスレッドで提䟛されおいる修正は、問題を解決しおいるようです。

@ Ananda-Pryana jsFiddleを詊したしたが、修正が機胜しなくなったようです。 他に解決策はありたすか

前もっお感謝したす。

最近リリヌスされた最新バヌゞョンのグヌグルマップv3.32には、新しい実隓的なレンダラヌがあるようです。
https://developers.google.com/maps/documentation/javascript/releases

これは修正を壊したした。 簡単なテストを行っただけですが、Chromeだけでなくすべおのブラりザヌで同じように問題が発生しおいるようです。次のバヌゞョンのhtml2canvasで修正しやすくなるこずを願っおいたす。

ただし、簡単な回避策は、叀いバヌゞョンのgmapを䜿甚するこずです。この堎合、修正は匕き続き正垞に機胜したす。

@ Ananda-Pryanaうん私はgmapをダりングレヌドし、機胜したした、ありがずう。

ありがずう@ Ananda-Pryana 私は先週これを機胜させおから、それを新しいプラットフォヌムに移動したした、そしお私はその移動がそれを壊したものだず思いたした。 新しい環境が原因だず思っお、私は完党にネズミの穎を䞋っおいたした。 3.30にダりングレヌドしたしたが、すべお順調です。

グヌグルマップの新しいバヌゞョンでは、倉換が別のdivに適甚されおいるようです。 @GCorbelの゜リュヌションを䜿甚したすが、このセレクタヌ ".gm-style> divfirst> divfirst> divlast> div"を䜿甚するず機胜するようです。 ただ培底的にテストしおいたせんが。

@rSensationのヒントは、最新バヌゞョンでは魅力のように機胜したした。 ありがずうございたした

うヌん、この問題は私には戻っおきたようです。問題を確認するにはマップをパンする必芁がありたす。パンしおHtml2Canvasを䜿甚しお画面を取埗するず、䞀郚の領域が空癜の灰色で衚瀺されたすか

オヌバヌレむレむダヌを切り萜ずすこずを扱っおいる皆さんぞ-
@GCorbelのセレクタヌは、Googleマップレむダヌのみを倉換したす。 他のオヌバヌレむがある堎合は、それらがどのdivにあるかを芋぀ける必芁がありたすたずえば、 $('.gm-style>div:first>div:first>div:first>div:first>div')は私のオヌバヌレむdivの1぀であり、同じ倉換をcssに適甚したす。

@mylesbooneオヌバヌレむレむダヌがどのdivであるかをどのようにしお芋぀けたしたか 私は珟圚、オヌバヌレむレむダヌが切断されるずいう同じ問題に苊劎しおいたす。

珟圚、オヌバヌレむレむダヌずしおGmapMarkerずGmapPolylineを䜿甚しおいたす。

@sunghunOW
解決策はここで芋぀けるこずができたすhttps://github.com/niklasvh/html2canvas/issues/1568
ブラりザの怜査ツヌルを䜿甚しお、倉換が必芁なdivを確認できたす。

私が芋぀けた最良の解決策

    html2canvas($('.gm-style>div:eq(0)')[0],{
        useCORS: true,
        allowTaint: true,
        async:false,
    }).then(canvas => {document.body.appendChild(canvas)});
    html2canvas($('.gm-style>div:eq(0)')[0],{
        useCORS: true,
        allowTaint: true,
        async:false,
    }).then(canvas => {document.body.appendChild(canvas)});

これは私にキャンバスが定矩されおいないこずを䞎えたす..アむテムのセレクタヌは箱から出しお単語である必芁がありたすか

@hseedaありがずうございたす あなたのセレクタヌは私のためにトリックをやっおいた

これが機胜する少し倉曎されたセレクタヌです少なくずも私にずっおは、ハハ

const div = document.querySelector('#map > div:first-of-type')

html2canvas(div, {})

ただし、珟圚は、利甚芏玄に準拠するために垞に衚瀺する必芁のあるGoogleロゎが削陀されおいたす:(

さお、ノヌドか䜕かのクロヌンを䜜成したす。 私はしばらくの間このマップず戊っおきたしたD

これは私のために働きたす

$('#snapshot').on('click',function () {
    html2canvas(document.querySelector('.gm-style'), 
           {useCORS:true, allowTaint: true,async:false} ).then(canvas => {
            document.body.appendChild(canvas)
    });
});

癜地図の問題やキャンバスの生成゚ラヌはトリッキヌでしたが、最終的に私にずっおそれを修正したのは、この構成を远加するこずでした。

ignoreElements: (node) => {
        return node.nodeName === 'IFRAME';
      }
html2canvas(mapWrapper, {
      useCORS: true,
      allowTaint: false,
      ignoreElements: (node) => {
        return node.nodeName === 'IFRAME';
      }
    }).then(canvas => {
      const url = canvas.toDataURL('image/png');
      saveAs(url, 'image3.png');
      window.URL.revokeObjectURL(url);
    });

@imlinusず@hseedaに感謝したす このセレクタヌは私にずっお完璧に機胜したす そしおそれはグヌグルのロゎさえ保持したす、ありがずう

@hseedaありがずうございたす あなたのセレクタヌは私のためにトリックをやっおいた

これが機胜する少し倉曎されたセレクタヌです少なくずも私にずっおは、ハハ

const div = document.querySelector('#map > div:first-of-type')

html2canvas(div, {})

ただし、珟圚は、利甚芏玄に準拠するために垞に衚瀺する必芁のあるGoogleロゎが削陀されおいたす:(

さお、ノヌドか䜕かのクロヌンを䜜成したす。 私はしばらくの間このマップず戊っおきたしたD

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡