前端如何实现自由截屏,并且还可以有画笔,文字标注,编辑度高的截图效果(多次截屏)?

文章介绍了如何使用JavaScript库js-web-screen-shot来实现在网页中截图的功能。通过创建实例,设置参数,结合HTML和Vue.js模板,展示了截图、转换为canvas、保存为base64数据以及将数据转化为Blob对象以备上传到服务器的完整流程。
摘要由CSDN通过智能技术生成

首推一个js插件,不会造轮子,还不会用轮子么...

npm install js-web-screen-shot@1.8.0

js-web-screen-shot 是一个基于 JavaScript 的屏幕截图工具,可以在网页中实现对当前页面或指定元素的截图操作。它通常使用 HTML5 中的Canvas APIHTML DOM技术创建画布并捕捉网页中的图像。

上代码

<template>
    <div class='container'>
        <button @click="btnclick">开始截屏</button>
        
        <img src="https://img1.baidu.com/it/u=1859277775,4024083831&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1685811600&t=0adc40ae0c92c28df7d5bc102ea32b84" alt="">
    </div>
</template>
<script>
import ScreenShort from 'js-web-screen-shot'
export default ({

    data() {
        return {
            uploadlist: [],
            imageFilelist: []
        }
    },
    methods: {
        btnclick() {
            // 实例一个对象
            const ScreenShortHandle = new ScreenShort({
                enbleWebRtc: false,//是否显示选项的框
                level: 99,//层级级别
                completeCallback: this.callback,//完成截图的操作
                closeCallback: this.closeFn,//自己操作即可
            })
        },
        callback(base64data) {
            var image = new Image()
            image.src = base64data;
            // 图片加载后触发回调
            image.onload = () => {
                var canvas = this.convertImageToCanvas(image);
                var url = canvas.toDataURL("image/jpeg");
                //
                this.uploadlist.push({ image: url })
                for (let i = 0; i < this.uploadlist.length; i++) {
                    if (this.uploadlist.length >= 6) {
                        this.uploadhide = false
                    }
                }
                console.log(this.uploadlist, "上传的图片列表")
                //然后使用atob把图片解码
                let bytes = window.atob(url.split(',')[1]);
                //使用arrayBuffer存储数组中的二进制数据
                let buffer = new ArrayBuffer(bytes.length)
                let uint = new Uint8Array(buffer)//生成一个8位数的数组 

                for (let i = 0; i < uint.length; i++) {
                    uint[i] = bytes.charCodeAt(i);//根据长度返回相应的unicode编码
                }
                //Blob对象
                var imageFile = new Blob([buffer], { type: "image/jpeg" })//type为图片格式
                //给后台返回的数组,我们的需求是截图多张上传给后端,如果只是上传一张 ,就不用做imageFile这一行,后续可以围绕着这个。
                this.imageFilelist.push(imageFile);
                if (this.imageFilelist !== "") {
                    console.log("截图成功")
                }
            }
        },
        closeFn() {

        },
        // 使用canvas绘制一个复杂且交互性更强的图片
        convertImageToCanvas(image) {
            var canvas = document.createElement("canvas");
            canvas.width = image.width;
            canvas.height = image.height;
            canvas.getContext("2d").drawImage(image, 0, 0)
            return canvas
        }
    },
    computed: {},
    mounted() { }
})
</script>
<style lang='scss' scoped>
.container {
    width: 100%;
    height: 100%;
}
</style>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值