如何将带有 img 标签的 div 转换为图片
How to convert a div with img tags to an image
我正在尝试将包含一些 img 标签的 div 转换为 png。经过一些搜索,看起来最好的方法是使用 html2canvas 库。
问题是它对我不起作用,我不明白为什么。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="lib/css/bootstrap.min.css">
<script src="lib/js/Blob.js"></script>
<script src="lib/js/canvas-to-blob.min.js"></script>
<script src="lib/js/FileSaver.js"></script>
<script src="lib/js/html2canvas.js"></script>
<script src="lib/js/jquery.min.js"></script>
<script src="lib/js/underscore-min.js"></script>
<title>Tests Only</title>
</head>
<body>
<div id="navigationButtons">
</div>
<div id="sourceScreen" style="width:200px">
<img id="lol" src="tier-icons/base_icons/bronze.png" />
</div>
<div id="targetScreen">
</div>
<script = "text/javascript">
jQuery('#navigationButtons').append('<button type="button" id="makeScreenshot">Screenshot</button>');
jQuery('#makeScreenshot').click(makeScreenshot);
function makeScreenshot(){
html2canvas(jQuery('#sourceScreen'), {
onrendered: function(canvas) {
jQuery('#targetScreen').html(canvas);
}
});
}
</script>
</body>
</html>
这是我的代码的 jsFiddle:
https://jsfiddle.net/2vv79ehy/1/
我试图在这个例子中首先使用 1 个 img 标签,目标是在真实图像下显示 canvas。
我知道这个库的跨域资源有问题,但是当我用我的真实代码进行测试时,图像托管在我的计算机上。
有谁知道怎么做或者是否有其他方法(如果它也能绕过跨域问题就太好了)?
除了跨域问题,您的 JSFiddle 可以正常工作。我一直在努力寻找一个快速破解它的方法,但我能想到的最好的办法就是利用你在 onrendered
事件中得到的 canvas 而我还没有确实玩过定位,z 顺序不可能以这种方式实现,但也许对 makeScreenshot
函数的这种编辑可以帮助您找到适合您的解决方案:
function makeScreenshot(){
html2canvas(jQuery('#sourceScreen'), {
onrendered: function(canvas) {
var img = jQuery("#cat");
var ctx = canvas.getContext("2d");
var originalPosition = { left: 0, top: 18 };
ctx.drawImage(img[0],originalPosition.left,originalPosition.top);
jQuery('#targetScreen').html(canvas);
}
});
}
我正在尝试将包含一些 img 标签的 div 转换为 png。经过一些搜索,看起来最好的方法是使用 html2canvas 库。
问题是它对我不起作用,我不明白为什么。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="lib/css/bootstrap.min.css">
<script src="lib/js/Blob.js"></script>
<script src="lib/js/canvas-to-blob.min.js"></script>
<script src="lib/js/FileSaver.js"></script>
<script src="lib/js/html2canvas.js"></script>
<script src="lib/js/jquery.min.js"></script>
<script src="lib/js/underscore-min.js"></script>
<title>Tests Only</title>
</head>
<body>
<div id="navigationButtons">
</div>
<div id="sourceScreen" style="width:200px">
<img id="lol" src="tier-icons/base_icons/bronze.png" />
</div>
<div id="targetScreen">
</div>
<script = "text/javascript">
jQuery('#navigationButtons').append('<button type="button" id="makeScreenshot">Screenshot</button>');
jQuery('#makeScreenshot').click(makeScreenshot);
function makeScreenshot(){
html2canvas(jQuery('#sourceScreen'), {
onrendered: function(canvas) {
jQuery('#targetScreen').html(canvas);
}
});
}
</script>
</body>
</html>
这是我的代码的 jsFiddle: https://jsfiddle.net/2vv79ehy/1/
我试图在这个例子中首先使用 1 个 img 标签,目标是在真实图像下显示 canvas。 我知道这个库的跨域资源有问题,但是当我用我的真实代码进行测试时,图像托管在我的计算机上。
有谁知道怎么做或者是否有其他方法(如果它也能绕过跨域问题就太好了)?
除了跨域问题,您的 JSFiddle 可以正常工作。我一直在努力寻找一个快速破解它的方法,但我能想到的最好的办法就是利用你在 onrendered
事件中得到的 canvas 而我还没有确实玩过定位,z 顺序不可能以这种方式实现,但也许对 makeScreenshot
函数的这种编辑可以帮助您找到适合您的解决方案:
function makeScreenshot(){
html2canvas(jQuery('#sourceScreen'), {
onrendered: function(canvas) {
var img = jQuery("#cat");
var ctx = canvas.getContext("2d");
var originalPosition = { left: 0, top: 18 };
ctx.drawImage(img[0],originalPosition.left,originalPosition.top);
jQuery('#targetScreen').html(canvas);
}
});
}