• js实现图片资源、blob、base64的各种场景转换


    文件转babase64

    function getImgToBase64(url,callback){//将图片转换为Base64
      var canvas = document.createElement('canvas'),
        ctx = canvas.getContext('2d'),
        img = new Image;
      img.crossOrigin = 'Anonymous';
      img.onload = function(){
        canvas.height = img.height;
        canvas.width = img.width;
        ctx.drawImage(img,0,0);
        var dataURL = canvas.toDataURL('image/png');
        callback(dataURL);
        canvas = null;
      };
      img.src = url;
    }
    View Code
    /**
     * 获取指定文件的base64编码
     * @param  object   File       Blob 或 File 对象       这里是file对象
     * @param  Function callback   返回数据的回调函数
     * @return string              返回base64编码
     */
    function getBase64(File,callback){
        var reader = new FileReader();                  //IE10+
        var AllowImgFileSize = 2100000;                 //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败
        var File = File||$("#file").get(0).files[0];    //获取上传的文件对象
        /*
            FileList {0: File, 1: File, length: 2} 多个文件
            File:{name: "fan.jpg", lastModified: 1559019043288, lastModifiedDate: Tue May 28 2019 12:50:43 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 3346145, type: "image/jpeg"}
            FileList {0: File, 1: File, length: 2}  单个文件
         */
        if (File) {
    
            //读取指定的 Blob 或 File 对象  触发loadend 事件 并将图片的base64编码赋值给result
            reader.readAsDataURL(File);
            //reader.readAsText(File)
            //异步通信 回调函数返回
            reader.onload = function (e) {
               //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64码部分(可选可不选,需要与后台沟通)
               if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
                    alert( '上传失败,请上传不大于2M的图片!');
                    return;
                }else{
                    var base64Data=reader.result;
                    //返回base64编码
                    callback(base64Data);
                }
            }
        }  
      
    }

    base64转换为file对象

    function Base64toFile(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, {type:mime});
        }

    base64转blob

    function dataURLtoBlob(dataurl) {
        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 Blob([u8arr], { type: mime });
    }
    View Code
    /*2:转bob*/
    /**
     * 将以base64的图片url数据转换为Blob
     * @param base64    用url方式表示的base64图片数据
     * @return blob     返回blob对象           
     */
    function convertBase64UrlToBlob(base64){
        var type =base64.split(",")[0].match(/:(.*?);/)[1];//提取base64头的type如 'image/png'     
        var bytes=window.atob(base64.split(',')[1]);//去掉url的头,并转换为byte (atob:编码 btoa:解码)
    
        //处理异常,将ascii码小于0的转换为大于0 
        var ab = new ArrayBuffer(bytes.length);//通用的、固定长度(bytes.length)的原始二进制数据缓冲区对象
        var ia = new Uint8Array(ab);
        for (var i = 0; i < bytes.length; i++) {
            ia[i] = bytes.charCodeAt(i);
        }
        return new Blob( [ab] , {type :type});
    }

    Blob转base64

    function blobToBase64(blob, callback) {
        let a = new FileReader();
        a.onload = function (e) { callback(e.target.result); }
        a.readAsDataURL(blob);
    }
  • 相关阅读:
    (1) C语言 基础1
    (5)数据契约
    hdu3592(差分约束) (线性)
    POJ3169 差分约束 线性
    BZOJ 3754 Tree之最小方差树 MST
    CodeForces788B 欧拉路
    【bzoj2152】聪聪可可 点分治
    POJ 1741 Tree【Tree,点分治】
    POJ3107 树的重心
    poj1655(dfs,树形dp,树的重心)(点分治基础)
  • 原文地址:https://www.cnblogs.com/lichihua/p/10991146.html
Copyright © 2020-2023  润新知