capturer div dans l'image en utilisant html2canvas

j'essaie de capturer une div dans une image en utilisant html2canvas

j'ai lu une question similaire ici comme

comment télécharger une capture d'écran en utilisant html2canvas?

créer une capture d'écran de la page Web en utilisant html2canvas (incapable d'initialiser correctement)


j'ai essayé le code

canvasRecord = $('#div').html2canvas(); 
dataURL = canvasRecord.toDataURL("image/png");

et le canvasRecord sera undefined après .html2canvas() appelé


et aussi ce

$('#div').html2canvas({
      onrendered: function (canvas) {
           var img = canvas.toDataURL()
           window.open(img);
      } 
});

navigateur donne quelques (48 pour être exact) erreurs similaires comme:

GET http://html2canvas.appspot.com/?url=https%3A%2F%2Fmts1.googleapis.com%2Fvt%…%26z%3D12%26s%3DGalileo%26style%3Dapi%257Csmartmaps&callback=html2canvas_1 404 (Not Found) 

BTW, j'utilise v0.34 et j'ai ajouté le fichier de référence html2canvas.min.js et jquery.plugin.html2canvas.js

Comment puis-je convertir le div en canvas afin de capturer l'image.

EDIT le 26 / Mar / 2013

j'ai trouvé de Joel exemple .

mais malheureusement quand Google map intégré dans mon application, il y aura des erreurs.

<html>
<head>
<style type="text/css">
div#testdiv
{
    height:200px;
    width:200px;
    background:#222;
}
div#map_canvas
{
    height: 500px;
    width: 800px;
    position: absolute !important;
    left: 500px;
    top: 0;
}
</style>
 <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script>
<script type="text/javascript" src="html2canvas.min.js"></script>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script language="javascript">
$(window).load(function(){
     var mapOptions = {
        backgroundColor: '#fff',
        center: new google.maps.LatLng(1.355, 103.815),
        overviewMapControl: true,
        overviewMapControlOptions: { opened: false },
        mapTypeControl: true,
        mapTypeControlOptions: { position: google.maps.ControlPosition.TOP_LEFT, style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
        panControlOptions: { position: google.maps.ControlPosition.RIGHT_CENTER },
        zoomControlOptions: { position: google.maps.ControlPosition.RIGHT_CENTER },
        streetViewControlOptions: { position: google.maps.ControlPosition.RIGHT_CENTER },
        disableDoubleClickZoom: true,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        minZoom: 1,
        zoom: 12
    };
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    $('#load').click(function(){

            html2canvas($('#testdiv'), {
                onrendered: function (canvas) {
                    var img = canvas.toDataURL("image/png")
                    window.open(img);
                }
            });

    });
});
</script>
</head>
<body>
<div id="testdiv">
</div>
<div id="map_canvas"></div>
<input type="button" value="Save" id="load"/>
</body>
</html>
28
demandé sur Timeless 2013-01-30 06:10:31

5 réponses

j'ai rencontré le même type d'erreur que vous avez décrit, mais la mienne était due au fait que le dom n'était pas complètement prêt à partir. J'ai testé à la fois avec jQuery tirant la div et aussi getElementById juste pour être sûr qu'il n'y avait pas quelque chose d'étrange avec le sélecteur jQuery. Ci-dessous un exemple qui fonctionne dans Chrome:

<html>
<head>
<style type="text/css">
div {
    height: 50px;
    width: 50px;
    background-color: #2C7CC3;
}
</style>
<script type="text/javascript" src="html2canvas.js"></script>
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script language="javascript">
$(document).ready(function() {
//var testdiv = document.getElementById("testdiv");
    html2canvas($("#testdiv"), {
        onrendered: function(canvas) {
            // canvas is the final rendered <canvas> element
            var myImage = canvas.toDataURL("image/png");
            window.open(myImage);
        }
    });
});
</script>
</head>
<body>
<div id="testdiv">
</div>
</body>
</html>
18
répondu Joel Schlundt 2013-02-07 23:39:10

Si vous voulez juste avoir capture d'écran d'un div, vous pouvez le faire comme ceci

html2canvas($('#div'), {
  onrendered: function(canvas) {
    var img = canvas.toDataURL()
    window.open(img);
  }
});
15
répondu J.J. Kim 2014-01-13 05:58:53

vous pouvez essayer ce code pour capturer un div quand le div est très large ou décalé par rapport à l'écran

var div = $("#div")[0];
var rect = div.getBoundingClientRect();

var canvas = document.createElement("canvas");
canvas.width = rect.width;
canvas.height = rect.height;

var ctx = canvas.getContext("2d");
ctx.translate(-rect.left,-rect.top);

html2canvas(div, {
    canvas:canvas,
    height:rect.height,
    width:rect.width,
    onrendered: function(canvas) {
        var image = canvas.toDataURL("image/png");
        var pHtml = "<img src="+image+" />";
        $("#parent").append(pHtml);
    }
});
5
répondu wang ye 2017-05-15 08:32:14

j'ai utilisé le code de Joel et j'ai fait un snippet

$(document).ready(function() {
  $("#button").click(function(){
    html2canvas($("#testdiv"), {
        onrendered: function(canvas) {
            // canvas is the final rendered <canvas> element
            var myImage = canvas.toDataURL("image/png");
            window.open(myImage);
        }
    });
  });
});
div {
    width: 150px;
    background-color: #2C7CC3;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="testdiv">
This is an image
</div>
<p id="button">Click me</p>
0
répondu Aónio 2017-05-09 14:08:25

vous devriez essayer ceci (test, fonctionne au moins dans Firefox):

html2canvas(document.body,{
   onrendered:function(canvas){
      document.body.appendChild(canvas);
   }
});

Im exécutant ces lignes de code pour obtenir le plein écran de navigateur (seulement l'écran visible, pas le site de trou):

var w=window, d=document, e=d.documentElement, g=d.getElementsByTagName('body')[0];
var y=w.innerHeight||e.clientHeight||g.clientHeight;

html2canvas(document.body,{
   height:y,
   onrendered:function(canvas){
      var img = canvas.toDataURL();
   }
});

plus d'explications et d'options ici: http://html2canvas.hertzen.com/#/documentation.html

-2
répondu Marcus 2013-02-07 22:22:19