import EXIF from 'exif-js'                       //获取拍照时的信息的库（角度），用于调正图片展示角度
import imageConversion  from 'image-conversion'  //图片压缩、转换处理库



/**
 * 压缩文件函数
 * 传入图片-压缩后的尺寸（kb）-压缩率
 * 返回压缩后的文件
 * @param {file} imageFile 
 * @param {number} compressSize 
 * @param {number} quality 
 */
export function JudgeCompress(imageFile, compressSize, quality = 0.99) {      //传入图片文件-规定压缩后的尺寸（kb）-压缩率
    return new Promise(function (resolve,reject) {
        if(imageFile.size < 100 * 1024) {   //如果图片小于规定尺寸，则直接返回    
            resolve(imageFile)
            return
        }                                     
        imageConversion.compressAccurately(imageFile,{size:compressSize,accuracy:quality,scale:0.5}).then(res =>{     //压缩函数
            resolve(res)
        })
    })
}



/**
 * 图片文件转base64 DataUrl
 * @param {file} file 
 */
export function FiletoDataURL(file){      
    return new Promise((resolve,reject) => {
        imageConversion.filetoDataURL(file).then(res => {               
            resolve(res)
        })
    })
}



/**
 * 判断文件类型是否为image
 * @param {file} file 
 */
export function CheckFile(file) {
    if (!/image\/\w+/.test(file.type)) {
        return false;
    }
    return file;
}



/**
 * 旋转图片总体函数
 * 传入文件，返回旋转后的文件
 * @param {file} imageFile 
 */
export function RotateImage(imageFile) {
    return new Promise((resolve,reject)=>{
        imageConversion.filetoDataURL(imageFile).then(res =>{     //把文件转成图片格式用于旋转
            var image = new window.Image();
            image.src = res
            image.onload = function () {
                // 旋转图片
                let newImage = handleRotate(image)
                imageConversion.dataURLtoFile(newImage.src).then(res => {
                    resolve(res)      //返回的是file（文件）
                })
            }
        })
    })
    // 使用如上filetoDataURL插件方法实现文件转url 而  替代本手写方法    by:luqiang  20191012 
    // var reader = new FileReader();
    // reader.onload = function(e){
    // }
    // reader.readAsDataURL(imageFile);            //先挂载onload方法再绑定read事件
}

/**
 * 处理旋转函数，传入图片，返回旋转正确的图片
 * @param {img} image 
 */
function handleRotate(image){     //处理旋转的函数
    var width = image.width;
    var height = image.height;
    var canvas = document.createElement("canvas")
    var ctx = canvas.getContext('2d');
    var newImage = new Image();
    //旋转图片操作
    EXIF.getData(image, function () {
        var orientation = EXIF.getTag(this, 'Orientation');
        let imageDate = null
        switch (orientation) {
            //正常状态
            case 1:
                // alert('旋转0°');
                newImage.src = image.src;
                break;
            //旋转90度
            case 6:
                // alert('旋转90°');
                canvas.height = width;
                canvas.width = height;
                ctx.rotate(Math.PI / 2);
                ctx.translate(0, -height);
                ctx.drawImage(image,0,0)
                imageDate = canvas.toDataURL('image/jpeg', 1)
                newImage.src = imageDate;
                break;
            //旋转180°
            case 3:
                // alert('旋转180°');
                canvas.height = height;
                canvas.width = width;
                ctx.rotate(Math.PI);
                ctx.translate(-width, -height);
                ctx.drawImage(image,0,0)
                imageDate = canvas.toDataURL('image/jpeg', 1)
                newImage.src = imageDate;
                break;
            //旋转270°
            case 8:
                // alert('旋转270°');
                canvas.height = width;
                canvas.width = height;
                ctx.rotate(-Math.PI / 2);
                ctx.translate(-height, 0);
                ctx.drawImage(image, -810,0)    //????安卓要-810？？？？
                // ctx.drawImage(image)
                imageDate = canvas.toDataURL('image/jpeg', 1)
                newImage.src = imageDate;
                break;
            //undefined时不旋转
            case undefined:
                // alert('旋转0°');
                newImage.src = image.src;
                break;
            default:
                newImage.src = image.src;
                break;
        }
    }
    );
    return newImage;
}



// 压缩图片函数    -->  by:luqiang  20191012  使用imageConversion库代替手写操作以精准控制压缩后的文件尺寸
// function Compress(image, quality) {
//     var canvas = document.createElement('canvas')
//     var ctx = canvas.getContext('2d');
//     var width = image.width;
//     var height = image.height;
//     canvas.width = width;
//     canvas.height = height;
//     ctx.drawImage(image, 0, 0, width, height);
//     //压缩操作
//     var imageData = canvas.toDataURL("image/jpeg", quality);
//     var imageLength = image.src.length;
//     console.log("压缩前：" + imageLength);
//     console.log("压缩后：" + imageData.length,imageData);
//     console.log("压缩率：" + ~~(100 * (imageLength - imageData.length) / imageLength) + "%");
//     return imageData;
// }
