Mapbox GL JS 在前端生成缩略图

文章介绍了如何在JavaScript中通过map.getCanvas().toBlob()方法代替toDataURL来获取地图的缩略图base64数据,从而实现更高效的图片处理。在业务代码中,该方法被封装在一个Promise中,并在地图加载完成后调用,用于上传图片。
摘要由CSDN通过智能技术生成

*如果可以实现记得点赞分享,谢谢老铁~*

第一步,在工具类中写一个方法,使用 map.getCanvas().toDataURL() 方法获取缩略图的 base64 数据。但本文中采用更轻巧的canvas.toBlob() 来实现。

/**
 * 截取地图生成base64地址的图片
 * @param map 
 */
export const screenshot = (map: any) => {
  return new Promise((resolve) => {
    // 获取地图 canvas 元素
    const canvas = map.getCanvas();
    // 设置要导出的图像分辨率和转换格式
    let format = 'png'; // 您也可以选择使用 jpeg
    let quality = 0.9; // 图像质量,值在 0~1 之间
    // let resolution = 2;// 2 倍的分辨率 
    // let dataURI = canvas.toDataURL('image/' + format, quality);  ps:  弃用
    // 生成的Base64图片将比使用toDataURL方法生成的小得多,并且可以方便地在浏览器中显示和处理。
    canvas.toBlob((blob: any) => {
        const reader = new FileReader();
        reader.readAsDataURL(blob);
        reader.onloadend = () => {
          const base64data = reader.result;
          resolve(base64data);
        }
    }, 'image/jpeg');
  });
}

第二步,在业务代码中引入screenshot此方法。 方法包装在初始化 map 对象后 map?.once(‘idle’)中使用,如下:

// 等待加载完成后再获取画布数据
map?.current?.once('idle', () => {
  const flag = Number(routeParams?.status) !== 0
  getResultImg(flag)
});

//获取地图img
const getResultImg = (flag: boolean) => {
  // canvas截图后的base64
  screenshot(map.current).then((base64Url: any)=>{
    if(base64Url){
      uploadImg({ imgUrl: base64Url}); //todo
    }
  })
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端加油站

你遇到的坑将由我来踩

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

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

打赏作者

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

抵扣说明:

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

余额充值