js使用canvas绘制高清图片

来源:互联网 发布:在线c语言教学系统 编辑:程序博客网 时间:2024/06/11 04:37

H5能使用canvas绘制图像,但是有些时候我们需要绘制高清的图片。

先介绍下几个定义:

什么是devicePixelRatio:

window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels
(dips))的比例。 公式表示就是:window.devicePixelRatio = 物理像素 / dips

dip或dp,(device independent pixels,设备独立像素)与屏幕密度有关。dip可以用来辅助区分视网膜设备还是非视网膜设备。
如果devicePixelRatio > 1说明是高清屏幕了,现在的手机设备很多都是高清屏幕,我的手机devicePixelRatio 是2。

js代码

(function() {    var img = null; //在需要绘制的图片放在方法外定义,如果一个画板多次绘制时,不会出现闪屏的问题。    var w = 0, h = 0 ; //图片显示的宽高    var ratio = 1 ; //devicePixelRatio值    var ratio_w = 0, ratio_h = 0; //绘制高清图片宽高    var canvas = document.getElementById("canvas"),        ctx = canvas.getContext("2d");    $("#drawImg").each(function() {        //只有当屏幕宽度变化和img对象为空时候才进行一次初始化参数        if(img == null || w != window.innerWidth) {            ratio = getPixelRatio(ctx); //获取设备的devicePixelRatio            w = window.innerWidth;  //获取设备的显示屏幕宽高            h = this.height * (window.innerWidth / this.width); //图片加载完this.height才大于0.            ratio_w = canvas.width = w * ratio;  //计算屏幕的高清图片的宽高,同时设置画板的像素              ratio_h = canvas.height = h * ratio;            img = new Image(ratio_w, ratio_h);   //多次创建imgae绘制会闪屏            //这个是重点,我们需要把canvas画板通过css样式控制显示高度            $("#canvas").css({                width: (w + 'px'),                height: (h + 'px')            });        }        img.src = "images/foo.png";        //只有在load完成才会进行绘制。所以绘制需要写在onload事件中        img.onload = function() {            ctx.clearRect(0, 0, ratio_w, ratio_h); //清除画板,不清除图像会覆盖。            ctx.drawImage(img, 0, 0, ratio_w, ratio_h); //绘制高清图片        }    });    //获取设备的devicePixelRatio    function getPixelRatio(context) {        var backingStore = context.backingStorePixelRatio ||            context.webkitBackingStorePixelRatio ||            context.mozBackingStorePixelRatio ||            context.msBackingStorePixelRatio ||            context.oBackingStorePixelRatio ||            context.backingStorePixelRatio || 1;        return(window.devicePixelRatio || 1) / backingStore;    };})()

html代码

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <script src="//cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>    </head>    <body>        <img id="drawImg" src="images/foo.png" style="display: none;"/>        <canvas id="canvas"></canvas>        <script type="text/javascript" src="js/star.js" ></script>    </body></html>

绘制成功,我们看下看html的canvas代码,style中的高宽是属性中的高宽的50%,因为设备的devicePixelRatio为2。也就是说,画板像素就是图片像素大小,但是显示大小为屏幕大小
宽高样式变化了

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕七个月蛀牙疼怎么办 宝宝只吃一边奶怎么办 实房付了定金后悔了怎么办 开车时遇到意外事故时怎么办 没干过影楼门市怎么办 uplay下载游戏速度0k怎么办 缓刑期间被别人打成轻伤怎么办 缓刑期间被别人打了怎么办 有缓刑被别人打怎么办 检察院不予立案怎么办公安局取保 监外执行过了又犯罪怎么办 监视居住期间再次犯罪怎么办 前妻有贷款跑了怎么办 未成年犯有缓刑罪继续犯罪怎么办 英朗出现检修esc怎么办 照相时奖状拿反了怎么办 wps文档加密后忘记密码怎么办 wps表格文件密码忘记了怎么办 wps表格密码忘记了怎么办 发布的文案缩成一行怎么办 创维电视都是VIP怎么办 挂电视距离太远怎么办 电视离沙发太近怎么办 苹果6更新11.1卡怎么办 苹果升级变卡了怎么办 迅雷被资源举报无法加速怎么办 迅雷的敏感资源无法加速怎么办 迅雷下载敏感资源无法加速怎么办 换手机微信账户怎么办 拉链拉不合没有蜡怎么办 长杆烟斗头松动怎么办? 大王卡没流量了怎么办 晚上电视想看野外生存怎么办 假离婚后真离婚怎么办 苹果手机在车上不能充电怎么办 遥控钥匙打不开车门怎么办 苹果访问限制密码忘记了怎么办 苹果手机忘记访问限制密码怎么办 苹果忘记访问限制密码怎么办 苹果限制访问密码忘了怎么办 东奥会计书盗版怎么办