Signature_pad: Usando o problema de dimensionamento de .fromDataURL()

Criado em 26 nov. 2014  ·  8Comentários  ·  Fonte: szimek/signature_pad

Oi Quando eu uso .fromDataURL() para carregar uma assinatura que foi criada na tela do mesmo tamanho usando esta biblioteca incrível, a imagem não é dimensionada corretamente e é 1/4 do tamanho.

Não tenho certeza se esta é a biblioteca ou não, mas redimensiono a tela antes de assinar originalmente e antes de carregar a assinatura na memória.

Isso é algum problema na minha lógica ou alguém já viu isso antes?

Comentários muito úteis

Para fazer o mesmo tamanho de imagem, você pode adicionar opções
signaturePad.fromDataURL(data, {width: 100, height: 100})
largura, altura deve ser igual ao tamanho da tela
Mais detalhes:
https://github.com/szimek/signature_pad/blob/master/src/signature_pad.ts

Todos 8 comentários

Aliás, tem a ver com o window.devicePixelRatio não ser o mesmo por algum motivo.

Ainda investigando, acho que pode ser um problema com meu código :(

Você está usando a versão mais recente (1.3.4)? 1.3.3 deveria corrigir fromDataURL quando window.devicePixelRatio é diferente de 1, mas foi (espero) realmente corrigido em 1.3.4.

Estou usando a versão mais recente.

Quando eu corrijo a proporção corretamente (como sua demonstração), meu dedo não corresponde onde a linha está aparecendo.

Estou apenas fazendo uma demo simples, então não é tão importante e vou brincar com ela mais tarde.

Aqui está uma demonstração simples: http://jsfiddle.net/szimek/baL7r8xd. Quando você pressiona o botão "substituir", ele limpa a tela e coloca a imagem de volta após 1s. Funciona bem no iPhone com window.devicePixelRatio de 2.

Estranho, funciona no meu android também.

Obrigado, vou resolver :)

Para quem por acaso se deparar com esse problema, descobri o que estava fazendo de errado.

Antes de inserir os dados, usando .fromDataURL(data) , certifique-se de dimensionar adequadamente a tela:

      function resizeCanvas(canvas) {
        var ratio =  window.devicePixelRatio || 1;
        canvas.width = canvas.offsetWidth * ratio;
        canvas.height = canvas.offsetHeight * ratio;
        canvas.getContext('2d').scale(ratio, ratio);
      }

      resizeCanvas(canvas);

Para fazer o mesmo tamanho de imagem, você pode adicionar opções
signaturePad.fromDataURL(data, {width: 100, height: 100})
largura, altura deve ser igual ao tamanho da tela
Mais detalhes:
https://github.com/szimek/signature_pad/blob/master/src/signature_pad.ts

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

Questões relacionadas

jsruok picture jsruok  ·  11Comentários

Zuldra picture Zuldra  ·  4Comentários

Sparticuz picture Sparticuz  ·  7Comentários

cristhianDt picture cristhianDt  ·  7Comentários

hostcia picture hostcia  ·  6Comentários