Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。

本文涉及的产品
小语种识别,小语种识别 200次/月
通用文字识别,通用文字识别 200次/月
票据凭证识别,票据凭证识别 200次/月
简介: Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。


paste组件

<template>
    <div>
        <el-button type="success" icon="el-icon-copy-document"
            @click="pasteText = '', visible = true">快捷粘贴(Ctrl+V)</el-button>
        <el-dialog 
            title="粘贴信息" 
            :visible.sync="visible" 
            append-to-body 
            :close-on-click-modal="false"
            :close-on-press-escape="false"
        >
            <el-input type="textarea" ref="textarea" :rows="10" placeholder="输入文字信息或直接粘贴图片" v-model="pasteText"
                maxlength="1000" show-word-limit @paste="paste"></el-input>
            <i class="upload-bg-img el-icon-picture"></i>
            <div slot="footer" class="dialog-footer">
                <el-button @click="close">取消</el-button>
                <el-button type="primary" @click="ok">确定</el-button>
            </div>
        </el-dialog>
    </div>
</template>
<script>
import $ from 'jquery';//cnpm i jquery -s
export default {
    data() {
        return {
            pasteText: '',
            visible: false,
        };
    },
    destroyed(d) {
        document.removeEventListener('paste', this.paste)
    },
    created() {
        document.addEventListener('paste', this.paste)
    },
    methods: {
        // 粘贴
        paste(event) {
            if (this.visible) return;
            // 文本----------------------------------------
            const text = (event.clipboardData || window.clipboardData).getData('text');
            if (text && text.trim()) {
                // console.log('粘贴的文本', text);
                this.pasteText = text;
                this.handleText(this.pasteText);
                return;
            }
            // 图片----------------------------------------
            let image = null;
            const items = (event.clipboardData || window.clipboardData).items;
            if (!items || items.length === 0) return this.$message.error('当前浏览器不支持本地打开图片,请复制粘贴文本内容!');
            for (let i = 0; i < items.length; i++) {
                if (items[i].type.indexOf('image') !== -1) {
                    image = items[i].getAsFile();
                    break;
                }
            }
            if (image) {
                // console.log('粘贴的图片', image);
                this.handleImage(image);
                return;
            }
            if (!text || !image) return this.$message.error('请粘贴文本或图片');
        },
        handleText(d) {
            let aa = d
                .replace(/\n(\n)*( )*(\n)*\n/g, "\n")//去掉多余空行
                .split('\n');//每一行作为一条数据
            let r = [];
            for (let i = 0, len = aa.length; i < len; i++) {
                let a = aa[i].trim().replace(/\s+/g, " ");//将连续多余空格缩减为一个空格
                a && r.push(a.split(" "));
            }
            this.$emit('result', r);
        },
        handleImage(d) {
            const reader = new FileReader();
            reader.readAsDataURL(d);
            reader.onload = e => {
                // e.target.result 即为base64结果
                let data = { image: e.target.result }
                data = JSON.stringify(data);
                // 粘贴上传图片接口调用(帮助文档:https://www.apispace.com/eolink/api/ocrbase/apiDocument#scroll=0) 
                $.ajax({
                    url: "https://eolink.o.apispace.com/ocrbase/ocr/v1/base",
                    method: "POST",
                    headers: {
                        "X-APISpace-Token": "自己去www.apispace.com申请",
                        "Authorization-Type": "apikey",
                        "Content-Type": "application/json"
                    },
                    data,
                    crossDomain: true
                })
                    .done(d => {
                        this.pasteText = d.words_result.map(v => v.word).join('\n')
                        this.visible = true;
                    })
                    .fail(d => {
                        this.$message.error(JSON.parse(d.responseText).msg);
                    });
            };
        },
        // 取消
        close(d) {
            this.visible = false;
        },
        // 确定
        ok(d) {
            if (this.pasteText && this.pasteText.trim()) {
                this.handleText(this.pasteText);
                this.close();
            } else this.$message.error(this.$refs.textarea.$el.querySelector("textarea").placeholder);
        },
    }
};
</script>
<style lang="scss" scoped>
.dialog-footer {
    display: flex;
    &>* {
        width: 100%;
    }
}
>>>.el-textarea {
    z-index: 1;
    .el-textarea__inner {
        min-height: 200px !important;
        max-height: 500px;
        background-color: transparent;
    }
}
.upload-bg-img {
    display: block;
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100px;
    height: 100px;
    font-size: 100px;
    transform: translateY(-10px);
    color: #eee;
    pointer-events: none;
    z-index: 0;
}
</style>

调用paste组件

<paste @result="pasteResult"></paste>
...
import paste from "@/vue/components/paste";
...
components: {
    paste,
},
...
pasteResult(d) {
    console.log(JSON.stringify(d, null, 2));//输入内容见下面gif截图
},


相关文章
|
24天前
|
机器学习/深度学习 人工智能 Serverless
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
满血 DeepSeek 免费用!支持联网搜索!创作声明:真人攥写-非AI生成,Written-By-Human-Not-By-AI
2531 9
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
|
2月前
|
编解码 文字识别 自然语言处理
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
### 简介 【批量识别图片内容重命名】工具可批量识别图片中的文字并重命名文件,方便高效处理大量图片。然而,OCR 技术面临字符识别错误(如形近字混淆、生僻字识别不佳)、格式错误(段落错乱、换行问题)和语义理解错误等挑战。为提高准确性,建议提升图片质量、选择合适的 OCR 软件及参数,并结合自动校对与人工审核,确保最终文本的正确性和完整性。
239 12
如何使用OCR技术批量识别图片中的文字并重命名文件,OCR 技术批量识别图片中的文字可能出现的错误
|
5月前
|
JavaScript API
vue中api统一管理
【10月更文挑战第4天】
|
6月前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
94 4
|
7月前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
75 1
|
7月前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
398 2
|
7月前
|
机器学习/深度学习 人工智能 文字识别
轻松识别文字,这款Python OCR库支持超过80种语言
轻松识别文字,这款Python OCR库支持超过80种语言
406 2
|
7月前
|
监控 安全 测试技术
确保第三方API安全的5个最佳实践
确保第三方API安全的5个最佳实践
|
7月前
|
数据采集 机器学习/深度学习 文字识别
OCR -- 文本检测 - 训练DB文字检测模型
OCR -- 文本检测 - 训练DB文字检测模型
157 0
|
7月前
|
前端开发 JavaScript 安全
入门Vue+.NET 8 Web Api记录(一)
入门Vue+.NET 8 Web Api记录(一)
241 4

热门文章

最新文章