2013-08-19 2 views
2
 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(); 
    } 
}); 

Я хочу увеличить качество canvasq.toDataURL(). Есть ли какой-нибудь метод? Потому что возвращенные данные низкое качество.Комплект Качество Png с html2canvas

+1

У меня такая же проблема здесь. В Safari html2canvas работает очень хорошо! но в Chrome получается очень низкое изображение. Есть идеи? – RicardoGonzales

ответ

5

Короткий ответ:
Установите размер изображения до 1/3 его первоначального размера.

Длинный ответ:
качества печати изображений на вашем сайте, 72dpi.

Когда вы пытаетесь распечатать свою страницу, все тексты отображаются как векторы высокого качества (обычно ~ 300 точек на дюйм, в зависимости от настроек печати).

Так что если вам нужно распечатать высококачественное изображение, вам нужно будет уменьшить его, по крайней мере, до трети его первоначального размера.

Когда вы используете библиотеку html2canvas для создания изображения, перед выполнением рендеринга вам нужно будет установить все размеры CSS до 300%.

Так считают это:

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() 
    } 
}); 

Working JSBin link

+3

Когда я клонировал элемент, html2canvas не работает! Зачем ? – user2622044

+0

Есть ли какие-либо отношения об этой ссылке https://github.com/niklasvh/html2canvas/issues/117 – user2622044

+0

Может ли кто-нибудь подтвердить, что этот подход работает? при клонировании у html2canvas возникает проблема (вероятно, потому, что клон не виден на dom) –

1

подход с CSS масштаба является правильным.

Сначала нам нужно увеличить элемент, , а затем в обратном вызове «html2canvas» масштабировать его.

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 
}); 
+0

Вам не нужно использовать префиксы поставщика в jQuery. Кроме того, это не сработало для меня, я не думаю, что html2canvas даже поддерживает любые преобразования CSS3 вообще. – Yeti