Html2canvas: A renderização da tela está borrada em telas de retina

Criado em 24 mai. 2014  ·  37Comentários  ·  Fonte: niklasvh/html2canvas

Obrigado pela ótima biblioteca! Uma coisa que estou notando é que as imagens ficam borradas ao usar uma tela retina. Por exemplo, aqui está a aparência da captura de tela de https://github.com/niklasvh/html2canvas em uma tela de retina (tirada da página de teste ).
screen shot 2014-05-24 at 1 29 51 pm

Acho que talvez seja necessário verificar a proporção entre window.devicePixelRatio e context.backingStorePixelRatio em algum lugar da renderização da tela ...?

ps Aqui estão alguns links úteis que encontrei ao tentar chegar à raiz do problema.

Bug

Comentários muito úteis

Aparentemente, você pode usar uma tela existente para renderização (que você pode pré-configurar para ser exibida na retina).

Exemplo:

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

Todos 37 comentários

Esta biblioteca é ótima, mas experimentando isso também. Eu acho que este é o mesmo problema que os # 379, # 373, # 340, # 203, # 312 e # 158 e mencionado no # 390.

Alguma atualização sobre isso?

não consertado

: +1:

+1 por favor conserte

Os estilos CSS de scalling e zoom do +1 não estão funcionando, certo? Poderia ser resolvido ampliando o html tirando a captura de tela e deveria parecer mais nítido

+1 por favor conserte

+1 correção

@zqcloveping
Mano, tente essas configurações, não resolve 100% mas aumenta a qualidade

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

@breim
Bro, 3T pela sua ajuda. Mas parece ser menos óbvio. Problemas de renderização em dispositivos de retina

Corrija isso!

+1 por favor conserte

Por favor, conserte isso, Orz

+1

Aparentemente, você pode usar uma tela existente para renderização (que você pode pré-configurar para ser exibida na retina).

Exemplo:

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 Sua solução funciona

Eu também gostaria que isso fosse consertado, por favor

+1

+1 Fix

@MisterLamb Estou tentando sua solução, mas não consigo fazê-la funcionar. Eu criei este violino com sua correção que parece não fazer nada - você sabe o que estou fazendo de errado? Você pode clicar no botão no violino e permitir o download de vários arquivos para testá-lo e ver se eles são idênticos nesta implementação.
original
notimproved

@MisterLamb ah acabou de mudar para 0.5.0-alpha1 e funciona melhor , obrigado. Atualizou o

+1

@MisterLamb et al, tentei hoje, e este snippet não funciona mais com 0.5.0 b4 - obtendo tela vazia - e renderizado corretamente se não estiver usando a própria tela.

editar: provavelmente meu bug, violino alterado está bem.

editar 2: não foi possível restringir, reimplementado assim e agora tenho algo visível, mas com algum deslocamento. talvez haja um estilo em algum lugar que o h2c não suporte totalmente e atrapalhe o resultado :( sorte minha.

editar 3: sim, tive que movê-lo para document.body para se livrar do deslocamento.

@MisterLamb você é um verdadeiro gênio, obrigado por compartilhar ... isso salvou meu dia

@MisterLamb você é o melhor 👍

@makc eu também! obtendo tela vazia - e renderizado corretamente se não estiver usando a própria tela.

Para sua informação - a solução @eKoopmans funciona bem até agora em testes: https://github.com/niklasvh/html2canvas/pull/1087 .. Atualmente em execução com ela

Fechando em favor de # 1087

@MisterLamb mas como melhorar a resolução da imagem ??
quando estou tentando salvar esta imagem salva em 96dpi, preciso de uma imagem de 300+ dpi. Como posso fazer isso ???

@ shivtumca12 na versão mais recente, v1.0.0-alpha.1 , você pode usar a opção scale para aumentar a resolução ( scale: 2 dobrará a resolução dos 96dpi padrão).

//Faça zoom de 90%, antes de chamar o html2canvas, depois volte o zoom para 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 Acima sua solução é trabalhada para textos na página html. Ao exibir o texto, ele converterá o texto na imagem de maneira brilhante. Mas o conteúdo da imagem (imagem) da página html ainda está sendo exibido com desfoque. Por favor, me aconselhe como posso corrigi-lo.

As imagens ainda estão borradas para mim também.

window.devicePixelRatio = 2;

Eu coloquei isso antes de fazer html2canvas e funcionou para mim

Olá, quero inserir o texto persa utf8, mas a fonte falha
Como resolver este problema
notimproved (3)

com http://jsfiddle.net/o0a8pbwd/1/ códigos

image

Por que esta imagem não sabe?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tibewww picture tibewww  ·  4Comentários

anthonymejia picture anthonymejia  ·  4Comentários

wbarrantes picture wbarrantes  ·  3Comentários

kunal886496 picture kunal886496  ·  3Comentários

arzyu picture arzyu  ·  3Comentários