一个 web 端选区截图插件,帮助你快速构建出精美的选区截图功能

33 天前
 xixixicat

region-screenshot-js



一个 web 端选区截图插件,帮助你快速构建出精美的选区截图功能。 喜欢的话给个 star 吧 https://github.com/weijun-lab/region-screenshot-js


🎨在线 Demo

https://weijun-lab.github.io/region-screenshot-js/

它如何工作

region-screenshot-js 的核心原理是使用WebRTC( Web Real-Time Communication )技术,读取浏览器标签页信息。因此 region-screenshot-js 只允许在本地环境或者 HTTPS 环境中运行。
你也可以通过如下设置使浏览器在在非 HTTPS 环境中运行 region-screenshot-js ,假设使用 Chrome 浏览器: (请谨慎使用,这可能引入安全隐患)

  1. 进入 chrome://flags/#unsafely-treat-insecure-origin-as-secure
  2. 在 Insecure origins treated as secure 文本框中输入你的网站地址,例如: https://www.example.com
  3. 勾选右侧 Enable

安装

使用

ESM(ECMAScript Modules)

import RegionScreenshot from "region-screenshot-js";

UMD(Universal Module Definition)

<script src="region-screenshot-js/region-screenshot.umd.js"></script>

let screenshot = new RegionScreenshot();

代码示例

let screenshot = new RegionScreenshot();
screenshot.on("screenshotGenerated",(dataUrl)=>{
	console.log(dataUrl);
})

文档

Options

配置项 类型 默认值 描述
downloadName String screenshot 截图下载文件名
regionColor String #409eff 选区轮廓颜色
maskColor String rgba(0,0,0,0.5) 遮罩层颜色
globalColorOptions Array [
"#ff3a3a","#f8b60f",
"#0083ff","#40ff00",
"#363636","#e9e9e9"
]
配置所有绘制项可供选择的颜色(当绘制项有单独的颜色配置时,该配置无效)
regionSizeIndicator Object {...} 左上角区域大小指示器样式(见下文)
rectangleOptions Object {
color:globalColorOptions,
size: [4, 6, 8]
}
配置矩形绘制项可供选择的颜色和线宽
circleOptions Object {
color:globalColorOptions,
size: [4, 6, 8]
}
配置圆形绘制项可供选择的颜色和线宽
paintOptions Object {
color:globalColorOptions,
size: [4, 6, 8]
}
配置自由画笔绘制项可供选择的颜色和线宽
mosaicOptions Object {
size: [6, 8, 10]
}
配置马赛克绘制项可供选择的线宽
textOptions Object {
color:globalColorOptions,
size: [16, 18, 20]
}
配置文字绘制项可供选择的颜色和字体尺寸
arrowOptions Object {
color:globalColorOptions,
size: [4, 6, 8]
}
配置箭头绘制项可供选择的颜色和线宽
customDrawing Array
<customDrawingObject>
- 自定义绘制(见下文)

regionSizeIndicator

Options Type Default Description
show Boolean true 尺寸指示器是否显示
color String #ffffff 尺寸指示器颜色
fontSize Number 14 尺寸指示器尺寸

customDrawingObject

Code Example
//其中“$”来自于 jquery.js
let screenshot = new RegionScreenshot({
  customDrawing: [
    {
      className: "triangle",
      optionsHtml: `
        <div class="triangle-size-options active" size="3">min</div>
        <div class="triangle-size-options" size="5">middle</div>
        <div class="triangle-size-options" size="7">max</div>
      `,
      onOptionsCreated(optionsEl) {
        $(optionsEl)
          .find("div")
          .click(function () {
            $(this).addClass("active");
            $(this).siblings().removeClass("active");
          });
      },
      onDrawingOpen(canvasEl,optionsEl,saveCallback) {
        let ctx = canvasEl.getContext("2d");
        canvasEl.style.cursor = "crosshair";
        canvasEl.onclick = function (e) {
          ctx.beginPath();
          ctx.lineWidth = $(optionsEl).find(".triangle-size-options.active").attr("size");
          ctx.moveTo(e.offsetX, e.offsetY - 10);
          ctx.lineTo(e.offsetX - 10, e.offsetY + 10);
          ctx.lineTo(e.offsetX + 10, e.offsetY + 10);
          ctx.closePath();
          ctx.stroke();
          saveCallback();//请在绘制结束后调用保存回调,以确保插件的撤销功能正常
        };
      },
      onDrawingClose(canvasEl) {
        canvasEl.onclick = null;
        canvasEl.style.cursor = "default";
      },
    },
  ],
});
配置项 类型 描述
className String 自定义绘制项的类名
optionsHtml String 定义自定义绘制项二级菜单的 html 内容
onOptionsCreated Function 当自定义绘制项的二级菜单创建完成该函数将被调用,可在参数中获取到二级菜单 dom 对象
onDrawingOpen Function 当自定义绘制项被激活时该函数将被调用,可在参数中获取到canvas dom 对象二级菜单 dom 对象保存历史记录函数,注意:请在每次自定义绘制结束后调用保存历史记录函数,以确保插件的撤销功能正常
onDrawingClose Function 当自定义绘制项被关闭时该函数将被调用,可在参数中获取到canvas dom 对象二级菜单 dom 对象

Event

代码示例

let screenshot = new RegionScreenshot();
screenshot.on("successCreated",(dataUrl)=>{
	console.log("插件初始化成功");
});
screenshot.on("screenshotGenerated",(dataUrl)=>{
	console.log(dataUrl);
});
事件名称 描述
screenshotGenerated 截图生成完成时触发,可在回调中获取图片 base64 编码
screenshotDownload 截图被下载时触发,可在回调中获取图片 base64 编码
regionDragging 选区尺寸或位置改变时触发,可在回调中获取选区的详细位置信息
regionDragStart 选区尺寸或位置改变前触发,可在回调中获取选区的详细位置信息
regionDragEnd 选区尺寸或位置改变后触发,可在回调中获取选区的详细位置信息
successCreated 插件初始化成功时触发
errorCreated 插件初始化失败时触发,可在回调中接受错误信息
closed 插件被关闭时触发

🎉致谢与引用

感谢以下插件,他们为 region-screenshot-js 实现提供了支持.

605 次点击
所在节点    分享创造
1 条回复
xixixicat
33 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1043446

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX