You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Canvas绘制文字模糊问题:在线正常本地异常原因咨询

Canvas绘制文字模糊的原因及解决方案

我之前踩过完全一样的坑!你遇到的问题核心在于Canvas元素的实际分辨率和CSS显示尺寸不匹配。

Canvas本质是一张像素画布:它的width和height属性决定了画布本身有多少像素(也就是绘图的原始分辨率),而CSS里设置的width/height只是把这张画布拉伸或压缩到浏览器里显示的大小。你现在只通过CSS给Canvas设置了936x435的显示尺寸,但没给Canvas元素设置对应的width和height属性,浏览器就会用默认的300x150像素分辨率来绘制,再拉伸到936x435,文字自然就糊成一团了。

快速解决当前问题

只需要给Canvas元素加上和CSS尺寸一致的width、height属性就行:

<canvas id="tree_canvas" class="tree_canvas_class" width="936" height="435"></canvas>

这样绘图的原始分辨率和显示尺寸一致,文字就能恢复清晰。

进阶:适配高DPI屏幕(视网膜屏)

如果要让你的Canvas在手机、MacBook这类高分辨率屏幕上也保持清晰,还需要处理设备像素比的问题。修改你的TypeScript代码如下:

public DrawTheTree() {
    var canvas: HTMLCanvasElement = document.getElementById("tree_canvas") as HTMLCanvasElement;
    var context: CanvasRenderingContext2D = canvas.getContext("2d") as CanvasRenderingContext2D;
    
    // 获取设备像素比,默认是1
    const dpr = window.devicePixelRatio || 1;
    // 获取Canvas的实际显示尺寸
    const rect = canvas.getBoundingClientRect();
    
    // 设置Canvas的实际分辨率为显示尺寸乘以设备像素比
    canvas.width = rect.width * dpr;
    canvas.height = rect.height * dpr;
    
    // 缩放绘图上下文,让后续绘制的内容自动适配高DPI
    context.scale(dpr, dpr);
    
    // 原来的绘图代码完全不用改,坐标还是基于CSS显示尺寸
    context.beginPath();
    context.font = "16px Comic Sans MS";
    context.fillStyle = "white";
    context.textAlign = "center";
    context.fillText("Animals", 150, 15);
    context.closePath();
}

这个处理会让Canvas的实际像素数是显示尺寸的dpr倍,再通过缩放上下文,保证绘制的文字和图形在任何屏幕上都锐利清晰。

内容的提问来源于stack exchange,提问作者osmnfrkn61

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:06:30