js将url中的png转换为base64

前言

今天在处理一个系统中的图片覆盖到文字上的功能,需要将富文本内的指定base64图片替换为新的图片(只能拿到一个系统上传的url,还得做base64转换,然后替换)遇到如下两个问题,这里把踩坑记录贴出来供大家参考。
1.按网络上的方案转换base64后,替换到富文本中内容显示[object Promise]
解决方案:调用方法的地方也要加上await,否则会走异步请求 如console.log(${await getImgImg(imgUrl)})
2.图片替换后,能正常渲染,但是背景一直是黑色,这个我在网上找了很久都没找到解决方案,有人说先填白色背景然后再替换什么的我也试了不行透明度丢失变成了jpg,最后看到一篇博文,他写的是canvas.toDataURL(‘image/png’); 而我在网络上找到的方案写的是canvas.toDataURL(‘image/jpeg’); 额就png和jpeg的差别,这个我找了一个小时,找到解决方案后才发现自己被自己蠢哭,额有时候就是这样,一个小的问题却自己没发现还要到处找解决方案。

源码

下面我把我的所有源码放出来供大家参考。

const base64 = (url) => {
  return new Promise((resolve) => {
    const image = new Image();
    // 先设置图片跨域属性
    image.crossOrigin = 'Anonymous';
    // 再给image赋值src属性,先后顺序不能颠倒
    image.src = url;
    image.onload = function () {
      const canvas = document.createElement('CANVAS');
      // 设置canvas宽高等于图片实际宽高
      canvas.width = image.width;
      canvas.height = image.height;
      canvas.globalAlpha = 1;
     const context= canvas.getContext('2d')
        context.drawImage(image, 0, 0);
      const dataURL = canvas.toDataURL('image/png');
      resolve(dataURL);
    };
    image.onerror = () => {
      resolve({ message: '相片处理失败' });
    };
  });
};

const getImgImg = async (url) => {
  let base64str = await base64(url);
  return base64str;
};
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱折腾的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值