url、base64、blob相互转换方法

简介: url、base64、blob相互转换方法

url、base64、blob相互转换方法



1url 转 base64


原理: 利用canvas.toDataURL的API转化成base64


function urlToBase64(url) {
  return new Promise ((resolve,reject) => {
    let image = new Image();
    image.onload = function() {
      let canvas = document.createElement('canvas');
      canvas.width = this.naturalWidth;
      canvas.height = this.naturalHeight;
      // 将图片插入画布并开始绘制
      canvas.getContext('2d').drawImage(image, 0, 0);
      // result
      let result = canvas.toDataURL('image/png')
      resolve(result);
    };
    // CORS 策略,会存在跨域问题https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror
    image.setAttribute("crossOrigin",'Anonymous');
    image.src = url;
    // 图片加载失败的错误处理
    image.onerror = () => {
      reject(new Error('urlToBase64 error'));
  };
}


调用


let imgUrL = http://XXX.jpg
urlToBase64(imgUrL).then(res => {
// 转化后的base64图片地址
console.log('base64', res)
})


base64 转 blob


原理:利用URL.createObjectURL为blob对象创建临时的URL

function base64ToBlob ({b64data = '', contentType = '', sliceSize = 512} = {}) {
return new Promise((resolve, reject) => {
// 使用 atob() 方法将数据解码
let byteCharacters = atob(b64data);
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = [];
for (let i = 0; i < slice.length; i++) {
byteNumbers.push(slice.charCodeAt(i));
}
// 8 位无符号整数值的类型化数组。内容将初始化为 0。
// 如果无法分配请求数目的字节,则将引发异常。
byteArrays.push(new Uint8Array(byteNumbers));
}
let result = new Blob(byteArrays, {
type: contentType
})
result = Object.assign(result,{
// 这里一定要处理一下 URL.createObjectURL
preview: URL.createObjectURL(result),
name: XXX.png
});
resolve(result)
})
}

调用

let base64 = base64.split(',')[1]
base64ToBlob({b64data: base64, contentType: 'image/png'}).then(res => {
// 转后后的blob对象
console.log('blob', res)
})


blob 转 base64


原理:利用fileReader的readAsDataURL,将blob转为base64

blobToBase64(blob) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.onload = (e) => {
resolve(e.target.result);
};
// readAsDataURL
fileReader.readAsDataURL(blob);
fileReader.onerror = () => {
reject(new Error('blobToBase64 error'));
};
});
}

调用

blobToBase64(blob).then(res => {
// 转化后的base64
console.log('base64', res)
})
相关文章
|
人工智能 Java 对象存储
Java获取阿里云图片临时URL与图片文件转换Base64编码方法
在使用阿里云人工智能产品服务时,有部分服务需要上传的参数中包含文件URL,当我们没有开通OSS服务时,可以使用临时URL服务、或部分服务支持Base64编码格式,此文章为生成临时URL-JavaSDK方案与图片文件转换Base64编码方案。
2008 0
|
3月前
|
存储 API 网络架构
【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度
【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度
|
3月前
|
存储 Java 开发工具
【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed
【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed
|
6月前
|
缓存 Java Apache
Spring一行代码搞定图片url地址转换为Base64,超简单!!!!
这段内容讲述了如何将URL指向的图片转换为Base64字符串。首先通过`org.apache.commons.io.IOUtils`或Java标准库读取URL的字节流,然后用Java 8的`Base64`类编码。示例代码提供了两种实现方式:一种依赖Apache Commons IO,另一种仅使用Java内置类。在第二种方式中,自定义了`toByteArray()`方法处理输入流并转换为字节数组,最后关闭输入流释放资源。
|
PHP 开发工具 计算机视觉
PHP SDK百度人脸识别遇见的坑,BASE64识别程度高但加载慢;URL加载快,但总image download fail
PHP SDK百度人脸识别遇见的坑,BASE64识别程度高但加载慢;URL加载快,但总image download fail
125 0
|
JavaScript 区块链
项目性能优化之用url-loader把小图片转base64,大图片使用image-webpack-loader压缩
项目性能优化之用url-loader把小图片转base64,大图片使用image-webpack-loader压缩
358 0
|
存储 数据采集 JavaScript
Blob URL 是什么?
URL.createObjectURL() 静态方法会创建一个 DOMString
320 0
Base64编码 url编码 获取当月所有日期 获取当月第一天和最后一天
Base64编码 url编码 获取当月所有日期 获取当月第一天和最后一天
|
JavaScript 前端开发
js:图片url转base64编码
js:图片url转base64编码
1057 0