Захватить div в изображение с помощью html2canvas
Я пытаюсь захватить div в изображение с помощью html2canvas
Я прочитал некоторый подобный вопрос здесь, как
Как загрузить скриншот с помощью html2canvas?
создать скриншот веб-страницы с помощью html2canvas (невозможно правильно инициализировать)
Я пробовал код
canvasRecord = $('#div').html2canvas();
dataURL = canvasRecord.toDataURL("image/png");
и canvasRecord
будет undefined
после .html2canvas()
а также это
$('#div').html2canvas({
onrendered: function (canvas) {
var img = canvas.toDataURL()
window.open(img);
}
});
браузер выдает несколько (48, если быть точным) похожих ошибок, таких как:
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)
Кстати, я использую v0.34, и я добавил справочный файл html2canvas.min.js
и jquery.plugin.html2canvas.js
Как я могу преобразовать div
в canvas
, чтобы захватить изображение.
РЕДАКТИРОВАТЬ 26/Март/2013
Я нашел пример работы Джоэла.
Но, к сожалению, когда Google Map встроен в мое приложение, будут ошибки.
<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>
Ответы
Ответ 1
Я столкнулся с тем же типом ошибок, которые вы описали, но мой был из-за того, что dom не был полностью готов к работе. Я тестировал оба jQuery, потянув div, а также getElementById, чтобы убедиться, что с селектором jQuery не было ничего странного. Ниже приведен пример, который работает в 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>
Ответ 2
Если вы просто хотите иметь скриншот div, вы можете сделать это следующим образом:
html2canvas($('#div'), {
onrendered: function(canvas) {
var img = canvas.toDataURL()
window.open(img);
}
});
Ответ 3
вы можете попробовать этот код для захвата div. Когда div очень широкий или смещен относительно экрана
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);
}
});
Ответ 4
Я использовал код Joel и сделал фрагмент
$(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>
Ответ 5
Это легко сделать с помощью html2canvas, попробуйте следующее,
попробуйте добавить div в html-модал и вызвать идентификатор модели с помощью функции jquery. В функции вы можете указать размер (высоту, ширину) отображаемого изображения. Использование модального режима - это простой способ захватить HTML-элемент div в изображение одним нажатием кнопки.
например, посмотрите на пример кода,
'
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<div class="modal-body">
<p>Some text in the modal.</p>
'
вставьте div, который вы хотите отобразить, внутри модели. Надеюсь, это поможет.
Ответ 6
window.open не работает для меня... только пустая страница отображается... но я смог заставить png появиться на странице, заменив атрибут src ранее существовавшего элемента img, созданного в качестве цели.
$("#btn_screenshot").click(function(){
element_to_png("container", "testhtmltocanvasimg");
});
function element_to_png(srcElementID, targetIMGid){
console.log("element_to_png called for element id " + srcElementID);
html2canvas($("#"+srcElementID)[0]).then( function (canvas) {
var myImage = canvas.toDataURL("image/png");
$("#"+targetIMGid).attr("src", myImage);
console.log("html2canvas completed. png rendered to " + targetIMGid);
});
}
<div id="testhtmltocanvasdiv" class="mt-3">
<img src="" id="testhtmltocanvasimg">
</div>
Ответ 7
Вы должны попробовать это (тест, работает как минимум в Firefox):
html2canvas(document.body,{
onrendered:function(canvas){
document.body.appendChild(canvas);
}
});
Я запускаю эти строки кода, чтобы получить полный экран браузера (только видимый экран, а не участок отверстия):
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();
}
});
Дополнительные пояснения и варианты здесь: http://html2canvas.hertzen.com/#/documentation.html