带预览截图的html代码

带预览截图的html代码

截取

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>动态实时裁剪图片</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 20px;
    }
    .container {
      display: flex;
      gap: 20px;
    }
    canvas {
      border: 1px solid #ccc;
    }
    #croppedPreview {
      border: 1px solid #ccc;
      max-width: 300px;
      max-height: 300px;
    }
  </style>
</head>
<body>
  <h1>动态实时裁剪图片</h1>
  <div class="container">
    <div>
      <input type="file" id="imageInput" accept="image/*" />
      <br /><br />
      <canvas id="sourceCanvas"></canvas>
    </div>
    <div>
      <h3>裁剪预览</h3>
      <canvas id="croppedCanvas"></canvas>
      <br /><br />
      <button id="downloadButton">下载裁剪后的图片</button>
    </div>
  </div>

  <script>
    const imageInput = document.getElementById('imageInput');
    const sourceCanvas = document.getElementById('sourceCanvas');
    const croppedCanvas = document.getElementById('croppedCanvas');
    const downloadButton = document.getElementById('downloadButton');
    const sourceCtx = sourceCanvas.getContext('2d');
    const croppedCtx = croppedCanvas.getContext('2d');

    let image = null;
    let isDragging = false;
    let startX, startY, endX, endY;

    // 加载图片并显示在 canvas 上
    imageInput.addEventListener('change', function (e) {
      const file = e.target.files[0];
      if (file) {
        const reader = new FileReader();
        reader.onload = function (event) {
          image = new Image();
          image.src = event.target.result;
          image.onload = function () {
            sourceCanvas.width = image.width;
            sourceCanvas.height = image.height;
            sourceCtx.drawImage(image, 0, 0);

            // 初始化裁剪区域
            startX = 0;
            startY = 0;
            endX = image.width;
            endY = image.height;
            updateCroppedPreview();
          };
        };
        reader.readAsDataURL(file);
      }
    });

    // 鼠标按下:开始选择裁剪区域
    sourceCanvas.addEventListener('mousedown', function (e) {
      isDragging = true;
      startX = e.offsetX;
      startY = e.offsetY;
    });

    // 鼠标移动:动态调整裁剪区域
    sourceCanvas.addEventListener('mousemove', function (e) {
      if (isDragging) {
        endX = e.offsetX;
        endY = e.offsetY;
        drawSelectionBox();
        updateCroppedPreview();
      }
    });

    // 鼠标松开:结束选择裁剪区域
    sourceCanvas.addEventListener('mouseup', function () {
      isDragging = false;
    });

    // 绘制选择框
    function drawSelectionBox() {
      sourceCtx.clearRect(0, 0, sourceCanvas.width, sourceCanvas.height);
      sourceCtx.drawImage(image, 0, 0);
      sourceCtx.strokeStyle = 'red';
      sourceCtx.lineWidth = 2;
      sourceCtx.strokeRect(startX, startY, endX - startX, endY - startY);
    }

    // 更新裁剪预览
    function updateCroppedPreview() {
      const cropWidth = Math.abs(endX - startX);
      const cropHeight = Math.abs(endY - startY);
      if (cropWidth > 0 && cropHeight > 0) {
        croppedCanvas.width = cropWidth;
        croppedCanvas.height = cropHeight;
        croppedCtx.drawImage(
          sourceCanvas,
          Math.min(startX, endX),
          Math.min(startY, endY),
          cropWidth,
          cropHeight,
          0,
          0,
          cropWidth,
          cropHeight
        );
      }
    }

    // 下载裁剪后的图片
    downloadButton.addEventListener('click', function () {
      if (croppedCanvas.width > 0 && croppedCanvas.height > 0) {
        const link = document.createElement('a');
        link.download = 'cropped-image.png';
        link.href = croppedCanvas.toDataURL();
        link.click();
      }
    });
  </script>
</body>
</html>
View Code
复制代码

效果

 

posted @   君子笑而不语  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-02-27 MySql存储过程中limit传参
点击右上角即可分享
微信分享提示