Javascript 使用html2canvas设置Png的质量 html2canvas($(“#元素”){ onrendered:function(canvasq){ var w=window.open(); w、 文件。写(“+ReportTitle+”); w、 文件。填写(“”); w、 打印(); } });

Javascript 使用html2canvas设置Png的质量 html2canvas($(“#元素”){ onrendered:function(canvasq){ var w=window.open(); w、 文件。写(“+ReportTitle+”); w、 文件。填写(“”); w、 打印(); } });,javascript,html,canvas,Javascript,Html,Canvas,我想提高canvasq.toDataURL()的质量。 有什么办法吗?因为返回的数据质量低。简短回答: 将图像大小设置为原始大小的1/3 详细回答: 您网站上的图像打印质量为72dpi 当您尝试打印页面时,所有文本都呈现为高质量矢量(通常为~300dpi,取决于您的打印设置) 因此,如果您需要打印出高质量的图像,您需要将其缩小到原始大小的至少三分之一 当使用html2canvas库生成图像时,在进行渲染之前,必须将所有CSS大小设置为300% 请考虑这个: html2canvas

我想提高canvasq.toDataURL()的质量。
有什么办法吗?因为返回的数据质量低。

简短回答:
将图像大小设置为原始大小的1/3

详细回答:
您网站上的图像打印质量为72dpi

当您尝试打印页面时,所有文本都呈现为高质量矢量(通常为~300dpi,取决于您的打印设置)

因此,如果您需要打印出高质量的图像,您需要将其缩小到原始大小的至少三分之一

当使用html2canvas库生成图像时,在进行渲染之前,必须将所有CSS大小设置为300%

请考虑这个:

        html2canvas($("#Element"), {
  onrendered: function(canvasq) {
    var w=window.open();
    w.document.write("<h3 style='text-align:center;'>"+ReportTitle+"</h3>");
    w.document.write("<img width='100%' height:'90%' src='"+canvasq.toDataURL()+"' />");
    w.print();
  }
});
var ReportTitle='Hello world!';//示范
var bigCanvas=$(“”)。appendTo('body');//这将是我们要渲染的3倍大小的画布
var scaleElement=$(“#元素”).clone()
.css({
“变换”:“比例(3,3)”,
“转换原点”:“0”
})
.附录(大画布);
var oldWidth=scaleElement.width();
var oldHeight=scaleElement.height();
var newWidth=oldWidth*3;
var newHeight=oldHeight*3;
bigCanvas.css({
“宽度”:newWidth,
“高度”:新高度
})
html2canvas(大画布{
onrendered:function(canvasq){
var w=window.open();
w、 文件。写(“+ReportTitle+”);
w、 文件。填写(“”);
w、 打印();
bigCanvas.remove()
}
});

使用css比例的方法是正确的

首先我们需要扩大元素的规模, 然后在“html2canvas”回调中,将其缩小

var ReportTitle = 'Hello world!';  // For demonstration

var bigCanvas = $("<div>").appendTo('body');  // This will be the 3x sized canvas we're going to render
var scaledElement = $("#Element").clone()
.css({
  'transform': 'scale(3,3)',
  'transform-origin': '0 0'
})
.appendTo(bigCanvas);

var oldWidth = scaledElement.width();
var oldHeight = scaledElement.height();

var newWidth = oldWidth * 3;
var newHeight = oldHeight * 3;

bigCanvas.css({
  'width': newWidth,
  'height': newHeight
})

html2canvas(bigCanvas, {
  onrendered: function(canvasq) {
    var w=window.open();
    w.document.write("<h3 style='text-align:center;'>"+ReportTitle+"</h3>");
    w.document.write("<img width='"+oldWidth+"' height='"+oldHeight+"' src='"+canvasq.toDataURL()+"' />");
    w.print();
    bigCanvas.remove() 
  }
});
var-ELEMENT=jQuery(“元素”);
//获取元素的宽度和高度
var w=ELEMENT.width();
var h=ELEMENT.height();
//放大你的元素
ELEMENT.css({
“变换”:“比例(3)”,
“-ms变换”:“比例(3)”,
“-webkit变换”:“缩放(3)”});
//运行html2canvas
html2canvas(元素{
onrendered:函数(画布){
//缩小你的元素
ELEMENT.css({
“转换”:“,
“-ms转换”:”,
'-webkit转换':''});
//将您的操作添加到画布
var win=window.open();
win.document.write('ttl');
win.document.write(“”);
win.print();
},
//设置合适的画布宽度和高度
宽度:w*3,
高度:h*3
});

您可以在html2canvas中使用缩放选项

在最新版本v1.0.0-alpha.1中,您可以使用scale选项来提高分辨率(scale:2将使默认96dpi的分辨率加倍)


这个链接有什么关系吗?有人能确认这个方法有效吗?克隆时,html2canvas出现问题(可能是因为克隆在dom上不可见),回调在.remove()之后是否会完成?html2canvas闭包是连续的,它是异步的吗?我们必须询问@kyle zhong,他似乎编辑了我的代码。@Interlated修复并测试了代码,添加了工作JSBin linkI。我在这里也有同样的问题。在Safari中,html2canvas工作得非常好!但在Chrome中,它的形象非常低。有什么想法吗?您不需要在jQuery中使用供应商前缀。此外,这对我来说不起作用,我认为html2canvas甚至不支持任何CSS3转换。
var ELEMENT = jQuery("#ELEMENT");

//get element width and height
var w = ELEMENT.width();
var h = ELEMENT.height();

//scale up your element
ELEMENT.css({
'transform': 'scale(3)',
'-ms-transform': 'scale(3)',
'-webkit-transform': 'scale(3)' });

//run html2canvas
html2canvas(ELEMENT, {
onrendered: function(canvas) {

//scale back your element
ELEMENT.css({
'transform': '',
'-ms-transform': '',
'-webkit-transform': '' });

//your actions to canvas
var win = window.open();
win.document.write('<h3 style="text-align:center;">ttl</h3>');
win.document.write('<img width="100%" height:"90%" src="'+canvas.toDataURL()+'"/>');
win.print();


},
//set proper canvas width and height
width: w*3,
height: h*3
});
// Create a canvas with double-resolution.
html2canvas(element, {
    scale: 2,
    onrendered: myRenderFunction
});