Html2canvas: Le rendu du canevas est flou sur les écrans Retina

Créé le 24 mai 2014  ·  37Commentaires  ·  Source: niklasvh/html2canvas

Merci pour la superbe bibliothèque! Une chose que je remarque cependant est que les captures d'écran sont floues lorsque vous utilisez un écran Retina. Par exemple, voici à quoi ressemble la capture d'écran de https://github.com/niklasvh/html2canvas sur un écran Retina (d'après la page de test ).
screen shot 2014-05-24 at 1 29 51 pm

Je pense qu'il faut peut-être vérifier le rapport entre le window.devicePixelRatio et le context.backingStorePixelRatio quelque part dans le rendu du canevas ...?

ps Voici quelques liens utiles que j'ai rencontrés en essayant d'accéder à la racine du problème.

Bug

Commentaire le plus utile

Apparemment, vous pouvez utiliser un canevas existant pour le rendu (que vous pouvez préconfigurer pour être affiché dans Retina).

Exemple:

var w = 1000;
var h = 1000;
var div = document.querySelector('#divtoconvert');
var canvas = document.createElement('canvas');
canvas.width = w*2;
canvas.height = h*2;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
var context = canvas.getContext('2d');
context.scale(2,2);
html2canvas(div, { canvas: canvas }).then(function(canvas) {
    // do what you want
});

Tous les 37 commentaires

Cette bibliothèque est géniale, mais en fait l'expérience aussi. Je pense que c'est le même problème que # 379, # 373, # 340, # 203, # 312 et # 158 et mentionné dans # 390.

Des mises à jour à ce sujet?

pas fixe

: +1:

+1 veuillez corriger

Les styles CSS de scalling +1 et de zoom ne fonctionnent pas correctement? Il pourrait être résolu en zoomant sur le html en prenant une capture d'écran et cela devrait paraître plus net

+1 veuillez corriger

+1 correction

@zqcloveping
Bro, essayez cette configuration, ne résolvez pas à 100% mais augmente la qualité

html2canvas (document.getElementById ('drapeau'), {
useCORS: vrai,
allowTaint: vrai,
letterRendering: vrai,
onrendered: function (canevas) {
var ctx = canvas.getContext ('2d');
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
},
});

@breim
Bro , 3Q pour votre aide, mais cela semble moins évident.

Regle-le, s'il te plait!

+1 veuillez corriger

Plz le réparer, Orz

+1

Apparemment, vous pouvez utiliser un canevas existant pour le rendu (que vous pouvez préconfigurer pour être affiché dans Retina).

Exemple:

var w = 1000;
var h = 1000;
var div = document.querySelector('#divtoconvert');
var canvas = document.createElement('canvas');
canvas.width = w*2;
canvas.height = h*2;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
var context = canvas.getContext('2d');
context.scale(2,2);
html2canvas(div, { canvas: canvas }).then(function(canvas) {
    // do what you want
});

@MisterLamb Votre solution fonctionne à

J'aimerais aussi que ce soit corrigé

+1

+1 Correction

@MisterLamb J'essaie votre solution mais je n'arrive pas à la faire fonctionner. J'ai créé ce violon avec votre correctif qui ne semble rien faire - savez-vous ce que je fais de mal? Vous pouvez cliquer sur le bouton dans le violon et autoriser le téléchargement de plusieurs fichiers pour le tester et voir qu'ils sont identiques dans cette implémentation.
original
notimproved

@MisterLamb ah vient de passer à 0.5.0-alpha1 et fonctionne mieux , merci. Mise à jour du

+1

@MisterLamb et al, juste essayé aujourd'hui, et cet extrait de code ne fonctionne plus avec 0.5.0 b4 - obtenir un canevas vide - et rendu correctement s'il n'utilise pas son propre canevas.

edit: probablement mon bug, le violon modifié est correct.

edit 2: impossible de le réduire, réimplémenté comme ça et maintenant j'ai quelque chose de visible mais avec un décalage. peut-être y a-t-il quelque part un style que h2c ne prend pas entièrement en charge et cela gâche le résultat: (lucky me.

edit 3: oui, a dû le déplacer vers document.body pour se débarrasser de l'offset.

@MisterLamb vous êtes un vrai génie, merci pour le partage ... ça m'a sauvé la journée

@MisterLamb vous êtes le meilleur 👍

@makc moi aussi! obtenir un canevas vide - et rendu correctement si vous n'utilisez pas votre propre canevas.

FYI - La solution https://github.com/niklasvh/html2canvas/pull/1087 .. Actuellement en cours d'exécution avec elle

Clôture en faveur du # 1087

@MisterLamb mais comment améliorer la résolution de l'image ??
lorsque j'essaie d'enregistrer cette image, elle a été enregistrée en 96 dpi, j'ai besoin d'une image de 300+ dpi. Comment puis-je faire ceci ???

@ shivtumca12 dans la dernière version, v1.0.0-alpha.1 , vous pouvez utiliser l'option scale pour augmenter la résolution ( scale: 2 doublera la résolution de 96 dpi par défaut).

// Zoomez à 90%, avant d'appeler html2canvas, puis faites un zoom arrière à 100%.

document.body.style.zoom = '99% ';
html2canvas (document.querySelector ("# content"), {allowTaint: false, widht: _width, height: _height}). then (function (canvas) {

    // var pdf = new jsPDF('p','pt','a4');
    // pdf.addImage(canvas.toDataURL("image/png"), 'PNG', 10, 10, 580, 0)                            
    // pdf.save('Grafico.pdf');        
    var link = document.createElement('a');
    link.href = canvas.toDataURL("image/png");
    link.download = 'Dashboard.png';
    document.body.appendChild(link);
    link.click();
    link.style.display = 'none';
    document.body.removeChild(link)        
    document.body.style.zoom = '100%';        
    $('.preloader-wrapper').hide();
});

@MisterLamb La solution ci-dessus est travaillée pour les textes de la page html. Lors de l'affichage du texte, il convertira le texte de l'image avec brio. Mais le contenu de l'image (image) de la page html s'affiche toujours avec du flou. Veuillez me conseiller comment le corriger.

Les images sont toujours floues pour moi aussi.

window.devicePixelRatio = 2;

J'ai mis cela avant de faire html2canvas et cela a fonctionné pour moi

Bonjour, je veux entrer le texte persan utf8, mais la police échoue
Comment résoudre ce problème
notimproved (3)

avec les codes http://jsfiddle.net/o0a8pbwd/1/

image

Pourquoi cette image ne le sait-elle pas?

Cette page vous a été utile?
0 / 5 - 0 notes