Respuestas:
El canvas
elemento DOM tiene .height
y .width
propiedades que corresponden a los atributos height="…"
y width="…"
. Ajústelos a valores numéricos en el código JavaScript para cambiar el tamaño de su lienzo. Por ejemplo:
var canvas = document.getElementsByTagName('canvas')[0];
canvas.width = 800;
canvas.height = 600;
Tenga en cuenta que esto borra el lienzo, aunque debe seguir ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);
para manejar los navegadores que no borran completamente el lienzo. Deberá volver a dibujar el contenido que desea que se muestre después del cambio de tamaño.
Tenga en cuenta además que la altura y el ancho son las dimensiones lógicas del lienzo utilizadas para dibujar y son diferentes de los atributos style.height
y style.width
CSS. Si no establece los atributos CSS, el tamaño intrínseco del lienzo se usará como su tamaño de visualización; si configura los atributos CSS y difieren de las dimensiones del lienzo, su contenido se escalará en el navegador. Por ejemplo:
// Make a canvas that has a blurry pixelated zoom-in
// with each canvas pixel drawn showing as roughly 2x2 on screen
canvas.width = 400;
canvas.height = 300;
canvas.style.width = '800px';
canvas.style.height = '600px';
Vea este ejemplo en vivo de un lienzo que se amplía 4x.
Un lienzo tiene 2 tamaños, la dimensión de los píxeles en el lienzo (es backingstore o drawingBuffer) y el tamaño de visualización. El número de píxeles se establece utilizando los atributos del lienzo. En HTML
<canvas width="400" height="300"></canvas>
O en JavaScript
someCanvasElement.width = 400;
someCanvasElement.height = 300;
Separado de eso están el ancho y la altura del estilo CSS del lienzo
En CSS
canvas { /* or some other selector */
width: 500px;
height: 400px;
}
O en JavaScript
canvas.style.width = "500px";
canvas.style.height = "400px";
La mejor manera de hacer un lienzo de 1x1 píxeles es SIEMPRE UTILIZAR CSS para elegir el tamaño y luego escribir un poco de JavaScript para que el número de píxeles coincida con ese tamaño.
function resizeCanvasToDisplaySize(canvas) {
// look up the size the canvas is being displayed
const width = canvas.clientWidth;
const height = canvas.clientHeight;
// If it's resolution does not match change it
if (canvas.width !== width || canvas.height !== height) {
canvas.width = width;
canvas.height = height;
return true;
}
return false;
}
¿Por qué es esta la mejor manera? Porque funciona en la mayoría de los casos sin tener que cambiar ningún código.
Como no configuré los atributos, lo único que cambió en cada muestra es el CSS (en lo que respecta al lienzo)
Notas:
¡Muchas gracias! Finalmente resolví el problema de píxeles borrosos con este código:
<canvas id="graph" width=326 height=240 style='width:326px;height:240px'></canvas>
Con la adición del 'medio píxel', el truco es desenfocar líneas.
La mejor manera de hacerlo:
<canvas id="myChart" style="height: 400px; width: 100px;"></canvas>
$('#mycanvas').attr({width:400,height:300}).css({width:'800px',height:'600px'});
si desea que el tamaño visual sea el mismo que el tamaño de píxel, nunca configure los estilos, solo los atributos.