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

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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度