JS 图片base64与file/blob的相互转换

图片base64与file/blob的相互转换

  1. 在开发中,经常会遇到需要将base64编码的图片转换为file文件格式用于上传的情况;图片base64编码转换为file格式过程中,思路:base64 --> Uint8Array --> new File()

  2. 具体实现方法如下,封装在文件xxx.js中,放置于项目文件夹utils下,开发中直接引入调用即可:

    /**
     * Base64 转 File
     * @param base64 String base64格式字符串
     * @param filename String 文件名称或者文件路径
     * @param contentType String file对象的文件类型,如:"image/png"
     */
     export function base64ToFile(base64, filename, contentType){
         var arr = base64.split(',')  //去掉base64格式图片的头部
         var bstr = atob(arr[1])   //atob()方法将数据解码
         var leng = bstr.length
         var u8arr = new Uint8Array(leng)
         while(leng--){
            u8arr[leng] =  bstr.charCodeAt(leng) //返回指定位置的字符的 Unicode 编码
         }
         return new File([u8arr], filename, {type:contentType}) 
     }
    
    /**
    * Base64转Blob
    * @param base64 String base64格式字符串
    * @param contentType String blob对象的文件类型,如:"image/png"
    */
    function base64ToBlob(base64, contentType){
    	var arr = base64.split(',')  //去掉base64格式图片的头部
    	var bstr = atob(arr[1])   //atob()方法将数据解码
    	var leng = bstr.length
    	var u8arr = new Uint8Array(leng)
    	while(leng--){
    		u8arr[leng] =  bstr.charCodeAt(leng) //返回指定位置的字符的 Unicode 编码
    	}
    	var blob = new Blob([u8arr],{type:contentType})
    	var blobImg = {}
    	blobImg.url = URL.createObjectURL(blob )  //创建URL,
    	blobImg.name = new Date().getTime() + '.png'
    	return blobImg
    }
    
    /**
     * File 转 Base64
     * @param file Object 文件对象流
     */
     export function fileToBase64(file){
    	return new Promise((resolve) => {
    		var reader = new FileReader()
    		reader.readAsDataURL(file)  
    		//读取后,result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件
    		reader.onload = function(e){
    			resolve(e.target.result)
    		}
         })
     }
    
    /**
    * Blob 转 Base64
    * @param blob Object blob对象
    */
    export function blobToBase64(blob){
    	return new Promise((resolve) => {
    		var reader = new FileReader()
    		reader.readAsDataURL(blob)  
    		//读取后,result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件
    		reader.onload = function(e){
    			resolve(e.target.result)
    		}
         })
    }
    
    
  3. 使用:引入xxx.js文件,调用方法

    // 注意引入路径不要出错
    import { base64ToFile, base64ToBlob, fileToBase64, blobToBase64 } from '@/utils/xxx.js'
    
    const file = base64ToFile(base64, 'picture', 'image/png')
    // 输出File对象
    console.log(file)
    
    const blob = base64ToBlob(base64, 'image/png')
    // 输出blob对象
    console.log(blob)
    
    fileToBase64(file).then(res => {
    	// 输出图片base64
    	console.log(res)
    }).catch(err => {
    	console.log(err)
    })
    
    blobToBase64(blob).then(res => {
    	// 输出图片base64
    	console.log(res)
    }).catch(err => {
    	console.log(err)
    })
    
    
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值