村农

莫笑农家腊酒浑,丰年留客足鸡豚。


图片压缩问题

function ImgToBase64(file, maxLen, callBack) {
    var img = new Image();
    var reader = new FileReader();//读取客户端上的文件
    reader.onload = function () {
        var url = reader.result;//读取到的文件内容.这个属性只在读取操作完成之后才有效,并且数据的格式取决于读取操作是由哪个方法发起的.所以必须使用reader.onload,
        img.src = url;//reader读取的文件内容是base64,利用这个url就能实现上传前预览图片
    };
    img.onload = function () {
    //生成比例
        var width = img.width, height = img.height;
    //计算缩放比例
        var rate = 1;
        if (width >= height) {
            if (width > maxLen) {
                rate = maxLen / width;
            }
        } else {
            if (height > maxLen) {
                rate = maxLen / height;
            }
        };
        img.width = width rate;
        img.height = height rate;
        //生成canvas
        var canvas = document.createElement(“canvas”);
        var ctx = canvas.getContext(“2d”);
        canvas.width = img.width;
        canvas.height = img.height;
        if(img.width < img.height){
            ctx.translate(img.width/2,img.height/2);
            ctx.rotate(Math.PI/2);
            ctx.translate(-img.width/2,-img.height/2);
        }
        ctx.drawImage(img, 0, 0, img.width, img.height);
        var base64 = canvas.toDataURL(‘image/jpeg’, 0.9);
        callBack(base64);
    };
    reader.readAsDataURL(file);
}
function dataURLtoFile(dataurl, filename) {//base64转换成文件
    var arr = dataurl.split(‘,’), mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n—){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File(u8arr, filename+’.jpg’, {type:mime});
}
atob(),btoa();
canvas.toDataURL(‘image/jpeg’, 0.9);
new File();

两个参数的例子是这样的:

var objFile=new File([“First Line Text”,“Second Line Text”],FileName);

第一个参数是一个字符串数组。数组中的每一个元素对应着文件中一行的内容。 第二个参数就是文件名字符串。 如果是用三个参数的形式,代码就是这样的:

var objFile=new File([“First Line Text”,“Second Line Text”],FileName,{type: “text/plain”
, lastModified: date});