chrome小插件:长图片等分切割

前置条件:

安装有chrome谷歌浏览器的电脑

使用步骤:

1.打开chrome扩展插件

2.点击管理扩展程序

3.加载已解压的扩展程序

4.选择对应文件夹

5.成功后会出现一个扩展小程序

6.点击对应小程序

7.选择图片进行切割,切割完成后会自动保存

代码:

1.manifest.json

java 复制代码
{
  "manifest_version": 3,
  "name": "图片裁切工具",
  "version": "1.0",
  "description": "将长图平均裁切成多份",
  "icons": {
    "128": "images/icon128.png"
  },
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "128": "images/icon128.png"
    }
  },
  "permissions": [
    "downloads"
  ]
} 

2.popup.js

javascript 复制代码
document.addEventListener('DOMContentLoaded', function() {
  const imageInput = document.getElementById('imageInput');
  const preview = document.getElementById('preview');
  const partsInput = document.getElementById('parts');
  const splitButton = document.getElementById('splitButton');
  
  let selectedImage = null;

  imageInput.addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (file) {
      const reader = new FileReader();
      reader.onload = function(e) {
        preview.src = e.target.result;
        preview.style.display = 'block';
        selectedImage = e.target.result;
      };
      reader.readAsDataURL(file);
    }
  });

  splitButton.addEventListener('click', function() {
    if (!selectedImage) {
      alert('请先选择图片!');
      return;
    }

    const parts = parseInt(partsInput.value);
    if (parts < 2) {
      alert('裁切份数必须大于等于2!');
      return;
    }

    const img = new Image();
    img.onload = function() {
      const canvas = document.createElement('canvas');
      const ctx = canvas.getContext('2d');
      
      const partHeight = Math.floor(img.height / parts);
      canvas.width = img.width;
      canvas.height = partHeight;

      for (let i = 0; i < parts; i++) {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(
          img,
          0, i * partHeight, // 源图片裁切起始位置
          img.width, partHeight, // 源图片裁切尺寸
          0, 0, // canvas绘制起始位置
          canvas.width, canvas.height // canvas绘制尺寸
        );

        // 将canvas转换为blob并下载
        canvas.toBlob(function(blob) {
          const url = URL.createObjectURL(blob);
          chrome.downloads.download({
            url: url,
            filename: `split_${i + 1}.png`,
            saveAs: false
          });
        }, 'image/png');
      }
    };
    img.src = selectedImage;
  });
}); 

3.popup.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <style>
    body {
      width: 300px;
      padding: 10px;
    }
    .container {
      display: flex;
      flex-direction: column;
      gap: 10px;
    }
    #preview {
      max-width: 100%;
      max-height: 200px;
      display: none;
    }
  </style>
</head>
<body>
  <div class="container">
    <input type="file" id="imageInput" accept="image/*">
    <img id="preview">
    <div>
      <label for="parts">裁切份数:</label>
      <input type="number" id="parts" min="2" value="2">
    </div>
    <button id="splitButton">开始裁切</button>
  </div>
  <script src="popup.js"></script>
</body>
</html> 
相关推荐
热爱编程的小曾10 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin22 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox34 分钟前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_593758102 小时前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox