【js实现框选截图】

网页截图功能分享

废话不多说直接上代码,当前版本就这样后期完善加补充,主要是利用canvas的进行截图,再转化为dataURL

function rectangleScreenShot(map, imgName, callback) {
    draw = new Draw({
      source: source,
      type: 'Circle',
      style: new Style({
        stroke: new Stroke({
          color: '#4771f0',
          width: 3
        }),
        fill: new Fill({
          color: 'rgba(0, 0, 0, 0)'
        }),
        image: new CircleStyle({
          radius: 8,
          fill: new Fill({
            color: '#4771f0'
          }),
          stroke: new Stroke({
            color: '#fff',
            width: 2
          })
        })
      }),
      geometryFunction: createBox()
    })
    map.addInteraction(draw)
    draw.on('drawend', (evt) => {
      // source.clear();
      map.removeInteraction(draw)
      console.log(evt)
      map.renderSync()

      const extent = evt.feature.getGeometry().getExtent()
      //地理坐标转换屏幕坐标
      const coord = [extent[0], extent[3]]
      const leftTopPosition = map.getPixelFromCoordinate(coord)
      const coord1 = [extent[2], extent[1]]
      const bottomRightPosition = map.getPixelFromCoordinate(coord1)
      //计算框选矩形的宽度以及高度像素
      const width = Math.abs(bottomRightPosition[0] - leftTopPosition[0])
      const height = Math.abs(bottomRightPosition[1] - leftTopPosition[1])
      //计算框选矩形的左上角屏幕坐标
      const minx = leftTopPosition[0]
      const miny = leftTopPosition[1]
      //创建canvas元素
      const mapCanvas = document.getElementsByClassName('ol-layer')[0].children[0]
      const imageData = mapCanvas.getContext('2d').getImageData(minx, miny, width, height)
      const canvas = document.createElement('canvas')
      canvas.width = width
      canvas.height = height
      canvas.getContext('2d').putImageData(imageData, 0, 0)
      const dataUrl = canvas.toDataURL() //转换图片为dataURL
      const link = document.createElement('a')
      link.download = imgName || 'mapShot'
      link.href = dataUrl
      link.click()
      callback && callback('截图成功')
    })
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值