zoukankan      html  css  js  c++  java
  • canvas解决画图模糊

    先加载Polyfill.js文件

    /**
     * HiDPI Canvas Polyfill (1.0.9)
     *
     * Author: Jonathan D. Johnson (http://jondavidjohn.com)
     * Homepage: https://github.com/jondavidjohn/hidpi-canvas-polyfill
     * Issue Tracker: https://github.com/jondavidjohn/hidpi-canvas-polyfill/issues
     * License: Apache 2.0
     */ (function(prototype) {
    
        var pixelRatio = (function(context) {
            var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;
    
            return (window.devicePixelRatio || 1) / backingStore;
        })(prototype),
    
            forEach = function(obj, func) {
                for (var p in obj) {
                    if (obj.hasOwnProperty(p)) {
                        func(obj[p], p);
                    }
                }
            },
    
            ratioArgs = {
                'fillRect': 'all',
                'clearRect': 'all',
                'strokeRect': 'all',
                'moveTo': 'all',
                'lineTo': 'all',
                'arc': [0, 1, 2],
                'arcTo': 'all',
                'bezierCurveTo': 'all',
                'isPointinPath': 'all',
                'isPointinStroke': 'all',
                'quadraticCurveTo': 'all',
                'rect': 'all',
                'translate': 'all',
                'createRadialGradient': 'all',
                'createLinearGradient': 'all'
            };
    
        if (pixelRatio === 1) return;
    
        forEach(ratioArgs, function(value, key) {
            prototype[key] = (function(_super) {
                return function() {
                    var i, len,
                    args = Array.prototype.slice.call(arguments);
    
                    if (value === 'all') {
                        args = args.map(function(a) {
                            return a * pixelRatio;
                        });
                    } else if (Array.isArray(value)) {
                        for (i = 0, len = value.length; i < len; i++) {
                            args[value[i]] *= pixelRatio;
                        }
                    }
    
                    return _super.apply(this, args);
                };
            })(prototype[key]);
        });
    
        // Stroke lineWidth adjustment
        prototype.stroke = (function(_super) {
            return function() {
                this.lineWidth *= pixelRatio;
                _super.apply(this, arguments);
                this.lineWidth /= pixelRatio;
            };
        })(prototype.stroke);
    
        // Text
        //
        prototype.fillText = (function(_super) {
            return function() {
                var args = Array.prototype.slice.call(arguments);
    
                args[1] *= pixelRatio; // x
                args[2] *= pixelRatio; // y
    
                this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g,
    
                function(w, m, u) {
                    return (m * pixelRatio) + u;
                });
    
                _super.apply(this, args);
    
                this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g,
    
                function(w, m, u) {
                    return (m / pixelRatio) + u;
                });
            };
        })(prototype.fillText);
    
        prototype.strokeText = (function(_super) {
            return function() {
                var args = Array.prototype.slice.call(arguments);
    
                args[1] *= pixelRatio; // x
                args[2] *= pixelRatio; // y
    
                this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g,
    
                function(w, m, u) {
                    return (m * pixelRatio) + u;
                });
    
                _super.apply(this, args);
    
                this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g,
    
                function(w, m, u) {
                    return (m / pixelRatio) + u;
                });
            };
        })(prototype.strokeText);
    })(CanvasRenderingContext2D.prototype);;
    (function(prototype) {
        prototype.getContext = (function(_super) {
            return function(type) {
                var backingStore, ratio,
                context = _super.call(this, type);
    
                if (type === '2d') {
    
                    backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;
    
                    ratio = (window.devicePixelRatio || 1) / backingStore;
    
                    if (ratio > 1) {
                        this.style.height = this.height + 'px';
                        this.style.width = this.width + 'px';
                        this.width *= ratio;
                        this.height *= ratio;
                    }
                }
    
                return context;
            };
        })(prototype.getContext);
    })(HTMLCanvasElement.prototype);
    

     再写入

    var canvas = document.querySelector('canvas');
    var ctx = canvas.getContext('2d');
    
    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 ratio = getPixelRatio(ctx);  
    ctx.drawImage(document.querySelector('img'), 0, 0, 300 * ratio, 90 * ratio);

      

  • 相关阅读:
    python学习----8.28---单例模式,网络编程
    python学习-----8.27----异常处理,元类
    python学习--8.23
    python学习-----8.22--classmethod和staticmethod
    Python学习---8.21组合,多态,封装
    python学习----8.20面向对象---继承与派生
    Python学习----8.17--面向对象编程
    python成长之旅 一
    python java php语言之间的对比
    python成长之旅
  • 原文地址:https://www.cnblogs.com/lixuemin/p/5143315.html
Copyright © 2011-2022 走看看