如何生成带有隐藏源的 html2canvas 图像 (html) div
How to generate a html2canvas images with a hidden source (html) div
我在一个项目中工作,我需要生成任何成员的个人资料图片及其评论,以及一些数据,我开始使用 GDI,但它太难理解了,所以我搜索了其他选项并发现 Html2Canvas 与 javascript/jquery 一起工作,一切都很好,我唯一无法处理的事情,想知道是否有隐藏源的方法 html div 不破坏结果图像。
例如:
现在是这样
应该是这样的
所以,当我在来源 div 的 css 上应用 display:none 时,图像结果是这样的:
最后是我目前的代码
var div_to_hide = $("#mydiv:hidden");
$(function() {
$('span.stars').stars();
});
html2canvas([document.getElementById('mydiv')], {
onrendered: function (canvas) {
document.getElementById('canvas').appendChild(canvas);
var data = canvas.toDataURL('image/png');
var image = new Image();
image.src = data;
document.getElementById('image').appendChild(image);
}
});
$.fn.stars = function() {
return $(this).each(function() {
var val = parseFloat($(this).html());
val = Math.round(val * 4) / 4;
var size = Math.max(0, (Math.min(5, val))) * 16;
var $span = $('<span />').width(size);
$(this).html($span);
});
}
https://jsfiddle.net/ricardojriosr/6ap9Lx1f/8/
现在的问题是我如何让这个作品只显示图像而不显示 HTML 来源。提前致谢。
不要在之前尝试隐藏它,而是在呈现 canvas 之后隐藏(或删除)它。
我不确定为什么 var div_to_hide
等于 $("#mydiv:hidden");
,但如果您将其更改为 var div_to_hide = $("#mydiv");
,那么在第 12 行附加图像后,您可以 运行 div_to_hide.hide();
为了避免 HTML 内容一闪而过,您可以使用一些 CSS 技巧来掩盖原来的 HTML。我在这里举了一个例子,但你可以根据你的实际需要进行调整。 https://jsfiddle.net/m5zq2kzn/
我遇到了同样的问题。
对我有用的解决方案是 css 把我想隐藏在屏幕外的 div 定位的技巧:
.offscreen {
position:absolute;
left:-10000px;
top:auto;
width:1px;
height:1px;
overflow:hidden;
}
然后像这样使用它:
html2canvas(document.getElementById("ticket_template"))
.then((canvas) => {
let imgData = canvas.toDataURL('image/png');
});
我在一个项目中工作,我需要生成任何成员的个人资料图片及其评论,以及一些数据,我开始使用 GDI,但它太难理解了,所以我搜索了其他选项并发现 Html2Canvas 与 javascript/jquery 一起工作,一切都很好,我唯一无法处理的事情,想知道是否有隐藏源的方法 html div 不破坏结果图像。
例如:
现在是这样
应该是这样的
所以,当我在来源 div 的 css 上应用 display:none 时,图像结果是这样的:
最后是我目前的代码
var div_to_hide = $("#mydiv:hidden");
$(function() {
$('span.stars').stars();
});
html2canvas([document.getElementById('mydiv')], {
onrendered: function (canvas) {
document.getElementById('canvas').appendChild(canvas);
var data = canvas.toDataURL('image/png');
var image = new Image();
image.src = data;
document.getElementById('image').appendChild(image);
}
});
$.fn.stars = function() {
return $(this).each(function() {
var val = parseFloat($(this).html());
val = Math.round(val * 4) / 4;
var size = Math.max(0, (Math.min(5, val))) * 16;
var $span = $('<span />').width(size);
$(this).html($span);
});
}
https://jsfiddle.net/ricardojriosr/6ap9Lx1f/8/
现在的问题是我如何让这个作品只显示图像而不显示 HTML 来源。提前致谢。
不要在之前尝试隐藏它,而是在呈现 canvas 之后隐藏(或删除)它。
我不确定为什么 var div_to_hide
等于 $("#mydiv:hidden");
,但如果您将其更改为 var div_to_hide = $("#mydiv");
,那么在第 12 行附加图像后,您可以 运行 div_to_hide.hide();
为了避免 HTML 内容一闪而过,您可以使用一些 CSS 技巧来掩盖原来的 HTML。我在这里举了一个例子,但你可以根据你的实际需要进行调整。 https://jsfiddle.net/m5zq2kzn/
我遇到了同样的问题。
对我有用的解决方案是 css 把我想隐藏在屏幕外的 div 定位的技巧:
.offscreen {
position:absolute;
left:-10000px;
top:auto;
width:1px;
height:1px;
overflow:hidden;
}
然后像这样使用它:
html2canvas(document.getElementById("ticket_template"))
.then((canvas) => {
let imgData = canvas.toDataURL('image/png');
});