这个怎么做? 2023-04-13 11:36 采纳率: 55.6%
浏览 23
已结题

JavaScript 将图片转为base64的方法

JavaScript 将图片转为base64的方法。
求JavaScript 将图片转为base64的方法

  • 写回答

2条回答 默认 最新

  • Nothing some time 2023-04-18 11:44
    关注

    在 JavaScript 中,可以使用 File API 和Canvas API 将图片转为base64格式的数据。以下是两种常用的方案:

    1. 使用 FileReader 和 Canvas API

    使用 FileReader 读取图片数据,然后使用 Canvas 在内存中创建一张尺寸和图像文件一样的画布,并在其中绘制读取的图像文件,最后将画布中的图像数据转为 base64 编码即可。

    示例代码如下:

    function fileToBase64(file) {
      return new Promise((resolve, reject) => {
        if (!file) return reject(new Error("文件不存在!"));
        if (!/image\/\w+/.test(file.type)) {
          return reject(new Error("文件类型不是图片!"));
        }
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function() {
          const img = new Image();
          img.src = this.result;
          img.onload = function() {
            const canvas = document.createElement('canvas');
            canvas.width = img.width;
            canvas.height = img.height;
            const ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0, img.width, img.height);
            const dataURL = canvas.toDataURL(file.type);
            resolve(dataURL);
          }
        };
        reader.onerror = function() {
          reject(new Error("文件读取出错!"));
        };
      });
    }
    

    调用方式:

    const fileInput = document.getElementById('fileInput');
    const file = fileInput.files[0];
    if(file) {
      fileToBase64(file).then(dataURL => {
        console.log(dataURL); // 输出转换后的 base64 编码
      }).catch(error => {
        console.error(error);
      });
    }
    
    1. 使用 XMLHttpRequest 和 Blob

    使用 XMLHttpRequest 读取图片数据,然后将数据转为 Blob 对象,并使用 FileReader 读取 Blob 数据,在其 onload 回调中将数据转为 base64 编码即可。

    示例代码如下:

    function imageToBase64(imageUrl) {
      return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', imageUrl, true);
        xhr.responseType = 'blob';
        xhr.onload = function() {
          if (this.status === 200) {
            const reader = new FileReader();
            reader.readAsDataURL(this.response);
            reader.onload = function() {
              resolve(this.result);
            };
            reader.onerror = function() {
              reject(new Error("读取数据出错!"));
            };
          } else {
            reject(new Error("请求出错!"));
          }
        };
        xhr.onerror = function() {
          reject(new Error("请求出错!"));
        };
        xhr.send();
      });
    }
    

    调用方式:

    const imageUrl = 'https://example.com/image.png';
    imageToBase64(imageUrl).then(dataURL => {
      console.log(dataURL); // 输出转换后的 base64 编码
    }).catch(error => {
      console.error(error);
    });
    

    以上两种方案都可以将图片转为 base64 编码,具体使用哪种方案,可以根据实际的场景和需求进行选择。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 MATLAB代码补全插值
  • ¥15 Typegoose 中如何使用 arrayFilters 筛选并更新深度嵌套的子文档数组信息
  • ¥15 前后端分离的学习疑问?
  • ¥15 stata实证代码答疑
  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的