html5canvas中绘制字体与图片以及图形依稀题目解决-
产生状况
多涌现在高dpi设施,这意味着每平方英寸有更多的像素,如手机,平板电脑。固然许多高端台式电脑也有高辨论率高dpi的显示器。
canvas在阅读器中的缩放道理
要是没有设定style那么就以html的属性width,height作为尺寸。
要是设定了style中的width、height,那么以其style设定为终究绘制到阅读器的尺寸。
也就是说,属性中的宽高并不代表现实宽高,所以高dpi下会放大canvas,致使依稀。
canvas的width、height属性是canvas的后缓冲尺寸,绘制到阅读器后会依据目前dpi进行缩放。
devicePixelRatio(window成员)保留了在高dpi状态部属性width/height被放大的比例。
差错的解决案例
网上搜寻canvas 依稀,会有两种解决办法,可能此刻都不适合了。
一个是CanvasRenderingContext2D.translate(0.5,0.5);
这个其实是在3D画图领域常用的,用于处置像素偏移,canvas的2d context已经处置了这方面的题目。
另一个是backingStorePixelRatio,你会看到相似下面这样的代码,这个backingStorePixelRatio已经在新阅读器中被去除了,我试过chrome与edge都已经不存在了。
var ctx = document.createElement("canvas").getContext("2d"), dpr = window.devicePixelRatio || 1, bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1
我在研究时用了动态新建canvas的办法,样式的width/height乘以缩放比devicePixelRatio得到canvas的属性width/height。
这不是完善的解决方案,由于在阅读器的dpi产生变化时,比方会员设定,或者从一个高dpi显示器挪移窗口到低dpi显示器时产生。(我1080p普通23寸显示器是1.25倍,平板电脑是2.0倍,之间拖放窗口就会产生)
解决办法
1、动态新建并监视window的onresize事件,依据devicePixelRatio重建canvas。
2、动态调整canvas样式的宽高,一样监视onresize事件。再配合CanvasRenderingContext2D.scale动态缩放绘制内容的比例。
阅读器都没有devicePixelRatio转变的事件,或者dpi转变的事件,要是你晓得,请留言。
以上就是html5 canvas中绘制字体与图片以及图形依稀题目解决的细致内容,更多请关注 百分百源码网 其它相干文章!