Descobri que o método fromDataURL
se comporta estranhamente em dispositivos que não têm a proporção de pixel 1, por exemplo, em dispositivos móveis com alto DPI.
Estou ciente da cláusula no README em que o tratamento de telas de alto DPI é discutido.
No entanto, ainda consigo reproduzir um problema usando fromDataURL
nos casos em que a tela é de tamanho fixo. Acredito que esse dimensionamento da imagem seja o motivo desse problema.
Você pode reproduzir esse problema usando este JSFiddle .
O bloco de assinaturas deve ser exatamente como era após a etapa 2.
As alterações no painel de assinatura são revertidas, mas a imagem foi redimensionada para parecer diferente do que estava no painel após a etapa 2.
Oi,
Eu também me deparei com esse problema. Este é um comportamento inesperado. Eu acho que devemos ter uma escolha se queremos essas modificações (então o segundo argumento padronizado para o comportamento anterior deve ser adequado). Principalmente porque algo assim não é feito automaticamente em nenhum outro lugar.
Muito obrigado @siggifv por sua investigação, você me economizou algum tempo.
Preencher a tela manualmente é o caminho por enquanto:
var image = new Image();
signaturePad.clear();
image.src = dataURL;
image.onload = function () {
signatureCanvas = document.querySelector("#signature-pad");
signatureCanvas.getContext("2d").drawImage(image, 0, 0, width, height);
};
this.signaturePad._isEmpty = false;
Oi Durasj,
muito obrigado ... tenho lutado e usado sua solução na minha diretiva angular.
Olá @durasj Muito obrigado, funciona perfeitamente
meu exemplo com writeValue
do acessador
writeValue(value: string): void {
if (!value) {
this.signaturePad.clear();
return;
}
this.value = value;
this._drawValueToCanvas();
this.cdr.markForCheck();
}
/** Draw from image according to retina or some devices */
_drawValueToCanvas() {
if (this.canvas != null) {
const image = new Image();
this.signaturePad.clear();
image.src = this.value;
image.onload = () =>
this.canvas
.getContext('2d')
.drawImage(image, 0, 0, 300, 120);
this.signaturePad._isEmpty = false;
}
}
Comentários muito úteis
Oi,
Eu também me deparei com esse problema. Este é um comportamento inesperado. Eu acho que devemos ter uma escolha se queremos essas modificações (então o segundo argumento padronizado para o comportamento anterior deve ser adequado). Principalmente porque algo assim não é feito automaticamente em nenhum outro lugar.
Muito obrigado @siggifv por sua investigação, você me economizou algum tempo.
Preencher a tela manualmente é o caminho por enquanto: