Debe cambiar el tamaño del lienzo con CSS o volver a dibujar el lienzo después de cambiar el tamaño.
Si desea guardar el contenido de la tela y volver a dibujar, puedo pensar en algunas opciones:
- Uso
context.getImageData
para agarrar todo el lienzo, cambiar el tamaño del lienzo, a continuación, utilizar context.putImageData
que volver a dibujarlo en la nueva escala
- Cree un objeto
Image
, establezca la fuente en el resultado de canvas.toDataUrl()
, cambie el tamaño del lienzo y luego dibuje la imagen en la nueva escala.
- llame al
context.setScale(xscale, yscale)
y llame a la función que utilizó para dibujar el lienzo originalmente. Suponiendo que configuró xscale
y yscale
correctamente, automáticamente escalará todo al nuevo tamaño.
- Cree un nuevo lienzo con el tamaño actualizado y llame al
context.drawImage(oldCanvas, ...)
para copiar el lienzo viejo en el nuevo. Luego cambiarías el viejo lienzo por el nuevo.
Las dos primeras opciones no funcionarán si ha dibujado una imagen desde un dominio diferente al lienzo en cualquier momento, y no son compatibles con implementaciones anteriores.
En mi opinión, la opción 3 (redibujar la imagen en la nueva escala) es la mejor si es posible. Es la única opción que mantendrá sus líneas completamente lisas y nítidas, y siempre funcionará (suponiendo que todavía tenga toda la información para generar la imagen).
Gracias. Desafortunadamente no puedo volver a dibujar los datos originales ya que el usuario los generó. Así que fui por la opción 1. –
Corrección leve en su punto 1. Es putImageData, no setImageData. –
Utilicé: var imgD = ctx.getImageData (0, 0, canvas.width - 1, canvas.height - 1); ctx.putImageData (imgD, 0, 0); –