1 解决方案 浏览器的对象 window 只有一个 属性是devicePixeRatio 的属性 。该属性表示了屏幕的设备像素比,即用几个像素宽度渲染一个像素的问题 举例子来说。 假设devicePixelRatio 的值为2 一张100/100 大小的图片 在Retina设备上 会用2个像素的空间。相当于图片放大了一倍,图片就会模糊 类似的,在 canvas context 中也存在一个 backingStorePixelRatio 的属性,该属性的值决定了浏览器在渲染canvas之前会用几个像素来来存储画布信息。 backingStorePixelRatio 属性在各浏览器厂商的获取方式不一样,所以需要加上浏览器前缀来实现兼容。 2 解决问题 【直接上代码】
<style>
canvas {
border: 1px solid red;
width: 100%;
}
</style>
<body>
<canvas id="canvas" height="180"></canvas>
</body>
1> 模糊的情况
// 原始做法
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');
ctx.font = '18px Geprgia';
ctx.fillStyle = '#999';
ctx.fillText('我是模糊的文字',50,50);
2> 清晰的情况
// 获取像素比
var getPixelRatio = function (context) {
var backingStore = context.backingStorePixelRatio ||
context.webkitBackingStorePixelRatio ||
context.mozBackingStorePixelRatio ||
context.msBackingStorePixelRatio ||
context.oBackingStorePixelRatio ||
context.backingStorePixelRatio || 1;
return (window.devicePixelRatio || 1) / backingStore;
};
//画文字
var myCanvas = document.getElementById("my_canvas");
var context = myCanvas.getContext("2d");
var ratio = getPixelRatio(context);
myCanvas.style.width = myCanvas.width + 'px';
myCanvas.style.height = myCanvas.height + 'px';
myCanvas.width = myCanvas.width * ratio;
myCanvas.height = myCanvas.height * ratio;
// 放大倍数
context.scale(ratio, ratio);
context.font = "18px Georgia";
context.fillStyle = "#999";
context.fillText("我是清晰的文字", 50, 50);
转载于:https://my.oschina.net/u/3692906/blog/1818628
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101646.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...