Câu trả lời:
Phần canvas
tử DOM có .height
và .width
các thuộc tính tương ứng với các thuộc tính height="…"
và width="…"
. Đặt chúng thành các giá trị số trong mã JavaScript để thay đổi kích thước canvas của bạn. Ví dụ:
var canvas = document.getElementsByTagName('canvas')[0];
canvas.width = 800;
canvas.height = 600;
Lưu ý rằng điều này sẽ xóa canvas, mặc dù bạn nên tuân theo ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);
để xử lý các trình duyệt không xóa hoàn toàn canvas. Bạn sẽ cần vẽ lại bất kỳ nội dung nào bạn muốn hiển thị sau khi thay đổi kích thước.
Lưu ý thêm rằng chiều cao và chiều rộng là kích thước vải logic được sử dụng để vẽ và khác với các thuộc tính style.height
và style.width
CSS. Nếu bạn không đặt các thuộc tính CSS, kích thước nội tại của khung vẽ sẽ được sử dụng làm kích thước hiển thị của nó; nếu bạn đặt các thuộc tính CSS và chúng khác với kích thước canvas, nội dung của bạn sẽ được thu nhỏ trong trình duyệt. Ví dụ:
// 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';
Xem ví dụ trực tiếp này về một khung vẽ được phóng to lên gấp 4 lần.
Một khung vẽ có 2 kích thước, kích thước của các pixel trong khung vẽ (đó là kho lưu trữ hoặc vẽBuffer) và kích thước hiển thị. Số lượng pixel được đặt bằng các thuộc tính canvas. Trong HTML
<canvas width="400" height="300"></canvas>
Hoặc bằng JavaScript
someCanvasElement.width = 400;
someCanvasElement.height = 300;
Khác biệt với đó là chiều rộng và chiều cao kiểu CSS của canvas
Trong CSS
canvas { /* or some other selector */
width: 500px;
height: 400px;
}
Hoặc bằng JavaScript
canvas.style.width = "500px";
canvas.style.height = "400px";
Cách tốt nhất để tạo một canvas 1x1 pixel là LUÔN SỬ DỤNG CSS để chọn kích thước sau đó viết một chút JavaScript để làm cho số pixel khớp với kích thước đó.
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;
}
Tại sao đây là cách tốt nhất? Bởi vì nó hoạt động trong hầu hết các trường hợp mà không phải thay đổi bất kỳ mã nào.
Bởi vì tôi đã không đặt các thuộc tính, điều duy nhất thay đổi trong mỗi mẫu là CSS (theo như liên quan đến khung vẽ)
Ghi chú:
Cảm ơn rât nhiều! Cuối cùng tôi đã giải quyết vấn đề pixel bị mờ với mã này:
<canvas id="graph" width=326 height=240 style='width:326px;height:240px'></canvas>
Với việc bổ sung 'nửa pixel' sẽ tạo ra mẹo để xóa các dòng.
Cách tốt nhất để làm điều đó:
<canvas id="myChart" style="height: 400px; width: 100px;"></canvas>
$('#mycanvas').attr({width:400,height:300}).css({width:'800px',height:'600px'});
Nếu bạn muốn có kích thước hình ảnh giống với kích thước pixel, không bao giờ đặt kiểu, chỉ có các thuộc tính.