Source: data/Image.js


/**
 * 针对图片的操作 压缩
 */
Rsd.define('Rsd.data.Image', {
    extend: 'Rsd.data.File',
    xtype: 'ajax-image',
    type: 'POST',
    cache: false,
    types: ['jpeg', 'png', 'gif', 'jpg'],//支持的文件类型
    /**
     * 文件大小自定义限制,大于该值文件不处理
     */
    maxSize : 1024 * 1024 * 10, // 限制大小10MB
    /**
     * 压缩 最小值,只有大于该值,才能压缩
     */
    minSize:200 * 1024, // 超过 200k 就压缩
    
    /*
        * */
    constructor: function File(config) {
        Rsd.apply(this, config || {});
    },
 

     /**
     * 使用canvas绘制图片并压缩
     * @param {*} dataURL 
     * @param {*} compress 压缩比 0~1
     * @param {*} callback 
     */
    compress: function compress(dataURL, compress, callback) {
        var me = this;
        if (dataURL.length < me.minSize) 
        {
            callback(dataURL);
            return;
        }
        var img = new window.Image();

        img.src = dataURL;

        img.onload = function () {

            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');

            canvas.width = img.width;
            canvas.height = img.height;
            //绘制
            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
  
            var compressedDataUrl = canvas.toDataURL(me.metaInfo.type, compress);

            callback(compressedDataUrl);
        }
    },

    /**
     * 将图片imgUrl,按压缩比compress 绘制到 canvas 上
     * @param {*} imgUrl 
     * @param {*} compress 
     * @param {*} canvas 画布
     * @param {*} x 位置X
     * @param {*} y 位置Y
     */
    drawImage:function drawImage(imgUrl,compress,canvas,x,y)
    {
        //压缩图片 
        this.compress(imgUrl,compress,function(dataURL){

            var img = new window.Image(); 
            img.src = dataURL;

            img.onload = function () {

                var ctx = canvas.getContext('2d'); 
                //绘制 可执行
                ctx.drawImage(img, x, y, img.width, img.height);
        
            };

        }); 
       
    }

}, function (type) {

});