使用vue-quill-editor实现图片截图复制粘贴上传

需求

运营需要用多张图片进行OCR识别,图片来源一般是运营的截图,直接粘贴过来,然后需求请求OCR截图提交图片list,粘贴图片的同时需要上传图片到cdn地址;

分析

  • 一个输入框(富文本框),这里没有用到富文本本身带的上传图片工具,如有用到直接配置上传图片就可以
  • 需要监听粘贴事件clipboardData
  • 监听粘贴事件上传图片
  • 获取所有粘贴的图片地址请求ocr接口

代码

<div class="ocr-content"><quill-editor ref="myQuillEditor" v-model="quillContent" :options="editorOption"></quill-editor>
</div>
data () {return {quillContent: '',editorOption: {theme: 'snow', // or 'bubble'placeholder: '将图片按Ctrl+V 粘贴至此处',modules: {clipboard: {matchers: [['img', this.handlePasteImg]]},toolbar: false}}}
},
methods: {handlePasteImg(node, delta) {let ops = []delta.ops.forEach(async (op, index) => {if (op.insert && typeof op.insert !== 'string') {  // 如果粘贴了图片,这里会是一个对象if (op.insert.image) {if (op.insert.image.includes(';base64')) {let file = this.dataURLtoFile(op.insert.image, `paste-${Math.random().toString(36).slice(-8)}.jpg`)const [res, err] = await apiService.getUploadToken()if (err) return false// key 值可以自己用当前日期生成let key = `page/${getCurrentDate('/')}/${new Date().getTime()}${Math.random().toString(36).slice(-8)}.jpg`let origin = res.data.picture.originconst fd = new FormData()fd.append('key', key)fd.append('token', res.data.picture.token)fd.append('origin', origin)fd.append('time', new Date().getTime())fd.append('file', file)apiService.uploadImage(fd).then(res => {console.log(res, 'res')let quill = this.$refs.myQuillEditor.quill // 获取富文本对象let length = quill.getSelection().index     // 获取编辑器光标位置quill.insertEmbed(length, 'image', `${origin}/${res.key}`) // 插入图片  图片地址quill.setSelection(length + 1)              // 光标后移一位   调整光标到最后}).catch(err => {console.log(err)})}}}})delta.ops = ops  // 不加会报错return delta},dataURLtoFile(dataurl, name) {let arr = dataurl.split(',')let mime = arr[0].match(/:(.*?);/)[1]let bstr = atob(arr[1])let n = bstr.lengthlet u8arr = new Uint8Array(n)while(n--){u8arr[n] = bstr.charCodeAt(n)}return new File([u8arr], name, {type:mime})},// 提取富文本中image中的srcextractImageSrc(htmlString) {let imgSrcArray = []let imgTagRegex = /<img[^>]+src=['"]([^'"]+)['"][^>]*>/glet matchwhile ((match = imgTagRegex.exec(htmlString)) !== null) {let src = match[1]imgSrcArray.push(src)}return imgSrcArray},// ocr识别async handleImageOCR() {if (!this.quillContent) {this.$Message.error('请上传图片!')return false}let imageList = this.extractImageSrc(this.quillContent)if (Array.isArray(imageList) && imageList.length) {const [res, err] = await service.ocrResult(imageList)if (err) returnif (res.ok && res.data) {this.ocrDescribe = res.data} }},
}

参考

  • vue前端富文本组件 quill-editor 粘贴图片的处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高阶SQL语句(二)

一 子查询 也被称作内查询或者嵌套查询&#xff0c;是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句 是先于主查询语句被执行的&#xff0c;其结果作为外层的条件返回给主查询进行下一 步的查询过滤。 ①子语句可以与主语句所查询的表相同&#xff0c;也可以是不…

STM32收发HEX数据包

在实际应用中&#xff0c;STM32的串口通信都是以数据包格式进行收发&#xff0c;这个数据包一般都包含包头和包尾&#xff0c;表示一个数据包。源代码在文末给出 数据包格式&#xff1a; 固定长度&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 问题1&#xff1a;当…

YoloV5改进策略:BackBone改进|ECA-Net:用于深度卷积神经网络的高效通道注意力

摘要 本文使用ECA-Net注意力机制加入到YoloV5中。我尝试了多种改进方法&#xff0c;并附上改进结果&#xff0c;方便大家了解改进后的效果&#xff0c;为论文改进提供思路。&#xff08;更新中。。。。&#xff09; 论文&#xff1a;《ECA-Net&#xff1a;用于深度卷积神经网…

183. 从不订购的客户

文章目录 题意思路代码 题意 题目链接 查找未出现在orders表里面的内容 思路 子查询not in 代码 select name as Customers from Customers where id not in (select customerId from Orders group by customerId)

86.分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; ​ 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&…

前端学习之JavaScript有关字符串的一些方法

&#xff08;注释是对各个方法的一些解释&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>字符串</title> </head> <body><script>let str1 test1let str2 n…

前端性能优化:掌握解决方案

课程介绍 我们常说性能永远是第一需求&#xff0c;作为一个前端工程师&#xff0c;不管使用什么框架&#xff0c;不管从事什么类型的网站或应用开发&#xff0c;只要是项目被用户使用&#xff0c;性能优化就永远是你需要关注的问题。通常情况下&#xff0c;工程师们在深入了解…

[C++打怪升级]--学习总目录

总结C打怪升级学习目录&#xff0c;便于翻阅&#xff0c;制作不易&#xff0c;点个赞吧&#xff0c;感谢&#xff01; 基础入门 ​​​​​​[C基础入门]&#xff08;一&#xff09;&#xff1a;初识 [C基础入门]&#xff08;二&#xff09;&#xff1a;数据类型 [C基础入门…

esp32c6 micropython固件首发

挺久没写正经文章了&#xff0c;主要是micropython确实也没那么多可挖掘的东西&#xff0c;这次带来的是micropython esp32c6 抢先版的固件&#xff0c;是df论坛的一位大佬编译的&#xff0c;属于测试阶段 固件下载地址 我30岁开始学编程&#xff0c;现在33了&#xff0c;终于程…

白板手推公式性质 AR模型 时间序列分析

白板手推公式性质 AR模型 时间序列分析 视频讲解&#xff1a;https://www.bilibili.com/video/BV1D1421S76v/?spm_id_from.dynamic.content.click&vd_source6e452cd7908a2d9b382932f345476fd1 B站对应视频讲解(白板手推公式性质 AR模型 时间序列分析)

[C语言]带连接数统计功能的多进程TCP服务器

编程思想: so,我们一分钱没花改造了一个简易TCP服务器,具体的: 1 当accept正常返回后,创建一个子进程用于处理数据 2 在子进程中 关闭socket返回的fd,在父进程中关闭accept返回的fd,防止资源泄露及不可预知的风险 3 父进程中忽略子进程结束信号,等于自动回收,防止变僵尸 当…

hdlbits系列verilog解答(Hadd)-65

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节我们创建一个半加法器。半加法器将两个位相加(无进位)并产生求和和进出。 模块声明 module top_module( input a, b, output cout, sum ); 思路: 可用真值表写出逻辑表达式,或者直接用数据流方式。 二…

Qt 压缩/解压文件

前面讲了很多Qt的文件操作&#xff0c;文件操作自然就包括压缩与解压缩文件了&#xff0c;正好最近项目里要用到压缩以及解压缩文件&#xff0c;所以就研究了一下Qt如何压缩与解压缩文件。 QZipReader/QZipWriter QZipReader 和 QZipWriter 类提供了用于读取和写入 ZIP 格式文…

linux 多个文件(csv)合并成一个文件(csv)

文章目录 前言实例:实战:另外&#xff0c;补充一个相关知识 总结 前言 Linux之cat合并多个文件 实例: # 将当前目录下所有csv结尾的文件合并到merge.csv cat *.csv > merge.csv # 当然也可以指定合并哪几个文件 cat db1.sql db2.sql db3.sql > db_all.sql 实战: 将每个…

好物视频素材哪里找?推荐以下几个自用很好的视频素材库

好物视频素材哪里找&#xff1f;这可是个让很多创作者头疼的问题。想制作一个吸引人的视频&#xff0c;好的素材可是关键。下面就给大家介绍几个热门的视频素材网站&#xff0c;希望能帮到你&#xff01; 蛙学网&#xff08;https://www.waxuewang.com/&#xff09;&#xff1…

国产数据库序列机制

数据库 达梦 序列&#xff1a;支持 主键自增&#xff1a;支持 使用序列 //1.创建序列 create sequence <序列名> increment by 10...; //2.使用序列&#xff0c;插入时指定&#xff0c;或者设计表字段默认值为seq1.nextval insert into <表名>(id,...) values…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

vs code

vs code 下载安装 https://code.visualstudio.com/https://code.visualstudio.com/ 下载完后&#xff0c;下一步下一步就安装完了&#xff0c;安装好后可以下载各种好用的插件

无需 VPN 即可急速下载 huggingface 上的 LLM 模型

无需 VPN 即可急速下载 huggingface 上的 LLM 模型 无需 VPN 即可急速下载 huggingface 上的 llm 模型安装依赖配置下载命令 无需 VPN 即可急速下载 huggingface 上的 llm 模型 快速下载huggingface模型&#xff1a; 安装依赖 pip install -U huggingface_hub hf_transfer …

已注册的商标别忘了续展,新注可能难下证!

近期普推知产老杨遇到好几个网友和看过多个案例&#xff0c;以前商标名称可以申请注册下来&#xff0c;但是换字体注册不下来了&#xff0c;有的是不想续展想直接换字体申请注册&#xff0c;但是也没有下来。 这些商标名称主要是存在禁止注册或缺显&#xff0c;比如“柳林”以前…