【Vue】fabricjs 实现局部截图及el-image-viewer大图预览

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>使用fabric.js裁剪和显示图片</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.5.0/fabric.min.js"></script>

</head>
<body>
    <canvas id="canvas" ></canvas>
    <img id="sourceImage" src="YOUR URL" style="display: none;">

    <script>
        // var canvas = new fabric.Canvas('canvas');
        var canvas = new fabric.StaticCanvas("canvas");
        var sourceImage = document.getElementById('sourceImage');
        //截图位置
        const cropXywh = [821,3799,97,90]
        fabric.Image.fromURL(sourceImage.src, function(img) {
            canvas.add(img);
            var text = new fabric.Text('这里是文本描述', {
                left: 0,
                top: 0,
                fontSize: 16,
                fill: 'red'
            });
            var textWidth = text.width; // 获取文本的宽度
            var textHeight = text.height; // 获取文本的高度
            img.set({
                left: 0,
                top: textHeight,
                width: cropXywh[2],
                height: cropXywh[3],
                cropX: cropXywh[0], // 裁剪区域左上角x坐标
                cropY: cropXywh[1], // 裁剪区域左上角y坐标
                cropWidth: cropXywh[2], // 裁剪区域宽度
                cropHeight: cropXywh[3] // 裁剪区域高度
            });
            
           
            let widths = [cropXywh[2],textWidth];
            let maxWidth = Math.max(...widths);
            let maxHeight = cropXywh[3]+textHeight;
            canvas.setWidth(maxWidth);
            canvas.setHeight(maxHeight);
            canvas.add(text);
            canvas.renderAll(); // 更新Canvas
            //若使用elementui可以显示局部图放大效果
            //let imgData = canvas.toDataURL({ format: "png", quality: 0.8 });
            // imageData.value = [imgData]
            // showImageViewer.value = true
        });
    </script>
</body>
</html>

效果图:

再结合el-image-viewer可以实现大图预览局部图的效果。

// 图片预览 
      <el-image-viewer
        style="z-index:1500"
        v-if="showImageViewer"
        @close="()=>{showImageViewer = false}"
        :url-list="imageData"
      >
onMounted(() => {
      // 通过遮罩层关闭图片预览
    document.addEventListener('click',function(e){
        if(e.target.className=="el-image-viewer__mask"){
            let close = document.querySelector(".el-image-viewer__close");
            if(close){
              close.click();
              showImageViewer.value = false
            }else{
             close = document.querySelector(".el-icon-circle-close"); 
              if(close){
                close.click();
                showImageViewer.value = false
              }
            }
        }
    });
 });

相关推荐

  1. vue3之基于el-image实现图片

    2024-02-21 22:32:01       28 阅读
  2. ffmpeg 实用命令 -- 设置

    2024-02-21 22:32:01       52 阅读
  3. puppeteer实现

    2024-02-21 22:32:01       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 22:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 22:32:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 22:32:01       82 阅读
  4. Python语言-面向对象

    2024-02-21 22:32:01       91 阅读

热门阅读

  1. C 编码规范

    2024-02-21 22:32:01       37 阅读
  2. 一文入门 HTTP 协议

    2024-02-21 22:32:01       48 阅读
  3. 【生活妙招分享】用管理方法缓解育儿焦虑

    2024-02-21 22:32:01       48 阅读
  4. ChatGPT:你的数字生活助手

    2024-02-21 22:32:01       56 阅读
  5. 【数据结构】15 队列应用实例:多项式加法运算

    2024-02-21 22:32:01       52 阅读