@antv/x6 加载网络图片为背景慢的问题的简单解决的方法

1、之前有一篇文章中写了加载本地图片为x6的背景图片失败的情况,但是实际项目中发现加载远程的图片,会有一个延迟的问题,导致了体验相当的差,也就是说有一段时间出现了慢慢的刷屏的问题,可能说体验很差。

2、为了这个问题,找了很多种方法去尝试,最后尝试出一种方法来,也就是将图片转了base64,然后再去加载,这样是可以的,实测通过。

3、代码:

async function resizeImage(imageUrl, width, height) {
    console.log(imageUrl, width, height);
    fetch(imageUrl)
      .then((response) => response.blob())
      .then((blob) => {
        // 创建一个Image对象
        const img = new Image();
        console.log(blob);
        // 使用ObjectURL将Blob转换为可直接使用的图片URL
        img.src = URL.createObjectURL(blob);
        img.width = width;
        img.height = height;
        // 在图片加载完成后执行的操作
        img.onload = () => {
          // 图片加载完成后,你可以将它插入DOM或者做其他操作
          // document.body.appendChild(img);
          const canvas = document.createElement('canvas');
          canvas.width = width;
          canvas.height = height;

          const ctx = canvas.getContext('2d');
          ctx.drawImage(img, 0, 0, width, height);

          let quality = 1.0;
          const resizedBase64 = canvas.toDataURL('image/jpeg', quality);
          imgBg.value = resizedBase64;
          // 清除对象URL资源
          URL.revokeObjectURL(img.src);
          return resizedBase64;
        };
      })
      .catch((error) => {
        console.error('图片加载失败:', error);
        imgBg.value = null;
        return null;
      });
  }

4、有了base64以后,我们就可以直接drawBackground或者在初始化的时候:

1)直接在

background:{

   ...

   image: imgBg.value,

}

或者 调用drawBackground方法

graph.drawBackground({
    color: '#000',
    position:{
      x: 0,
      y: 0,
    },
    size: {
      width: widthPx,
      height: heightPx,
    },
    image: imgBg.value, // 设置背景图片
  })

5、注意:上面的drawBackground一样要在画布初始化完成以后调用,否则是看不到效果的。(除了黑屏,因为颜色是#000)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值