使用tui-image-editor 图片编辑 标注图片

需求背景

鼠标悬浮在图片上 出现编辑按钮 点击编辑 对该图片进行编辑(输入文案、涂鸦、标记、裁剪等)

可以体验一下它线上编辑器

Image-editor | TOAST UI :: Make Your Web Delicious!

使用

  • 首先在你的前端项目中安装:
npm i tui-image-editor
// or
yarn add tui-image-editor

我是封装成一个单独的组件 使用的时候直接引入就行

  • 新建一个.vue文件
  • <template><div class="container"><div id="tui-image-editor"></div><div slot="footer" class="dialog-footer"><el-button size="mini" @click="close">取消</el-button><el-button size="mini" type="primary" @click="uploadImg">完成并保存</el-button></div></div><!-- <el-dialog append-to-body :visible.sync="editor" :before-close="closeFun" title="详情" top="0" width="95%"><div class="container"><div id="tui-image-editor"></div></div><span slot="footer" class="dialog-footer"><el-button size="mini">下载</el-button><el-button size="mini">保存至服务器</el-button></span></el-dialog> -->
    </template>
    <script>
    import {getSubToken} from '@/api/index'
    import 'tui-image-editor/dist/tui-image-editor.css';
    import 'tui-color-picker/dist/tui-color-picker.css';
    const ImageEditor = require('tui-image-editor');
    const localeZh = {// override default English locale to your customCrop: '裁剪',DeleteAll: '全部删除',Delete: '删除',Undo: '撤销',Redo: '反撤销',Reset: '重置',Flip: '镜像',Rotate: '旋转',Draw: '画',Shape: '形状标注',Icon: '图标标注',Text: '文字标注',Mask: '遮罩',Filter: '滤镜',Bold: '加粗',Italic: '斜体',Underline: '下划线',Left: '左对齐',Center: '居中',Right: '右对齐',Color: '颜色','Text size': '字体大小',Custom: '自定义',Square: '正方形',Apply: '应用',Cancel: '取消','Flip X': 'X 轴','Flip Y': 'Y 轴',Range: '区间',Stroke: '描边',Fill: '填充',Circle: '圆',Triangle: '三角',Rectangle: '矩形',Free: '曲线',Straight: '直线',Arrow: '箭头','Arrow-2': '箭头2','Arrow-3': '箭头3','Star-1': '星星1','Star-2': '星星2',Polygon: '多边形',Location: '定位',Heart: '心形',Bubble: '气泡','Custom icon': '自定义图标','Load Mask Image': '加载蒙层图片',Grayscale: '灰度',Blur: '模糊',Sharpen: '锐化',Emboss: '浮雕','Remove White': '除去白色',Distance: '距离',Brightness: '亮度',Noise: '噪音','Color Filter': '彩色滤镜',Sepia: '棕色',Sepia2: '棕色2',Invert: '负片',Pixelate: '像素化',Threshold: '阈值',Tint: '色调',Multiply: '正片叠底',Blend: '混合色'// etc...
    };
    const customTheme = {// image 坐上角度图片'common.bi.image': '', // 在这里换上你喜欢的logo图片'common.bisize.width': '0px','common.bisize.height': '0px','common.backgroundImage': 'none','common.backgroundColor': '#f3f4f6','common.border': '1px solid #444',// header'header.backgroundImage': 'none','header.backgroundColor': '#f3f4f6','header.border': '0px','header.display': 'none',// load button'loadButton.backgroundColor': '#fff','loadButton.border': '1px solid #ddd','loadButton.color': '#222','loadButton.fontFamily': 'NotoSans, sans-serif','loadButton.fontSize': '12px','loadButton.display': 'none', // 可以直接隐藏掉// download button'downloadButton.backgroundColor': '#fdba3b','downloadButton.border': '1px solid #fdba3b','downloadButton.color': '#fff','downloadButton.fontFamily': 'NotoSans, sans-serif','downloadButton.fontSize': '12px','downloadButton.display': 'none', // 可以直接隐藏掉// icons default'menu.normalIcon.color': '#8a8a8a','menu.activeIcon.color': '#555555','menu.disabledIcon.color': '#434343','menu.hoverIcon.color': '#e9e9e9','submenu.normalIcon.color': '#8a8a8a','submenu.activeIcon.color': '#e9e9e9','menu.iconSize.width': '24px','menu.iconSize.height': '24px','submenu.iconSize.width': '32px','submenu.iconSize.height': '32px',// submenu primary color'submenu.backgroundColor': '#1e1e1e','submenu.partition.color': '#858585',// submenu labels'submenu.normalLabel.color': '#858585','submenu.normalLabel.fontWeight': 'lighter','submenu.activeLabel.color': '#fff','submenu.activeLabel.fontWeight': 'lighter',// checkbox style'checkbox.border': '1px solid #ccc','checkbox.backgroundColor': '#fff',// rango style'range.pointer.color': '#fff','range.bar.color': '#666','range.subbar.color': '#d1d1d1','range.disabledPointer.color': '#414141','range.disabledBar.color': '#282828','range.disabledSubbar.color': '#414141','range.value.color': '#fff','range.value.fontWeight': 'lighter','range.value.fontSize': '11px','range.value.border': '1px solid #353535','range.value.backgroundColor': '#151515','range.title.color': '#fff','range.title.fontWeight': 'lighter',// colorpicker style'colorpicker.button.border': '1px solid #1e1e1e','colorpicker.title.color': '#fff'
    };
    export default {props: ['editor', 'editImgUrl', 'editFile'],watch: {'editImgUrl': {deep: true,handler: function (newVal, oldVal) {console.log(newVal, oldVal, '000000000000000')}}},data () {return {instance: null};},mounted () {this.init()},methods: {init () {this.instance = new ImageEditor(document.querySelector('#tui-image-editor'),{includeUI: {loadImage: {path: this.editImgUrl,name: 'image'},initMenu: 'draw',menu: ['crop', // 裁切'draw', // 添加绘画'text', // 添加文本'rotate', // 旋转'flip' // 翻转// 'shape', // 添加形状// 'icon', // 添加图标// 'mask', // 添加覆盖// 'filter' // 添加滤镜],menuBarPosition: 'bottom',locale: localeZh,theme: customTheme,cssMaxWidth: 800,cssMaxHeight: 500}});document.getElementsByClassName('tui-image-editor-main')[0].style.top = 0;// document.querySelector('[tooltip-content="ZoomIn"]').style.display = 'none' // 放大// document.querySelector('[tooltip-content="ZoomOut"]').style.display = 'none' // 缩小document.querySelector('[tooltip-content="Hand"]').style.display = 'none' // 拖动界面document.querySelector('[tooltip-content="History"]').style.display = 'none'document.querySelector('.tie-btn-deleteAll').style.display = 'none' // 清空},uploadImg () {const base64String = this.instance.toDataURL();const data = window.atob(base64String.split(',')[1]);const ia = new Uint8Array(data.length);for (let i = 0; i < data.length; i++) {ia[i] = data.charCodeAt(i);}const blob = new Blob([ia], { type: 'image/png' });var abc = new File([blob], this.editFile.fileName, {type: 'image/png', lastModified: Date.now()});const file = new FormData();console.log(abc)file.append('file', abc);// axios请求代码...},close () {this.$emit('close')}}
    };
    </script><style lang="scss" scoped>
    .container {height: 100%;text-align: left;
    }
    .dialog-footer{position: absolute;bottom: 8px;right: 10px;
    }
    </style>
    

    默认的样式如下

说明:直接按照官方的 有很多东西是我们不需要的比如上面的logo 和右上角的按钮  可以通过自定义样式去掉 参考代码里的customTheme 还有官方的提示都是英文的 所以需要汉化 参考代码里的localeZh

调整完之后

引用组件

import tuiImageEditor from '../../tuiImageEditor';
components: { tuiImageEditor },
<el-dialog class="body" append-to-body :visible.sync="editor" :before-close="close" title="编辑" top="0" width="95%"><tui-image-editor ref="tuiImageEditor" :editor="editor" :editImgUrl='editImgUrl' :editFile="editFile"@close="close" @uploadImg="uploadImg"></tui-image-editor></el-dialog>

有很多涉及传值的地方 可以根据自己项目的场景删掉或者替换

到这里就差不多可以了 说下我遇到的问题

1.刚开始的时候 我的悬浮气泡里文字样式错位 我自己重新安装了一下 就又好了 

2.我的需求是在弹窗内编辑 所以理所当然的是把这个编辑器放在弹窗里再装成组件之后 但是引入后 就报错 不知道啥原因 所以我就在引入组件的时候 用弹窗包起来 大家如果有知道原因的 欢迎评论区留言

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

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

相关文章

高概率文字生成Stable Cascade Comfyui极简安装教程

Stable Diffisuin 2.1之前的模型的痛点是不能生成文字&#xff0c;SDXL能生成文字&#xff0c;但正确率极低。Stable Diffusion 3据说能生成高画质图的同时&#xff0c;还能正确输出文字&#xff0c;但......还不能下载到。这中间stability.ai出了一个Stable Cascade模型。工作…

Spring MVC中常用注解

文章目录 Spring MVC 框架提供了一系列注解&#xff0c;用于简化开发者的编码工作&#xff0c;并提高代码的可读性和可维护性。以下是 Spring MVC 中常用的注解&#xff1a;Controller&#xff1a;RestController&#xff1a;RequestMapping&#xff1a;PathVariable&#xff1…

dp7——博弈

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 博弈dp需要记录玩家的转换 下位01 486. 预测赢家⭐思想⭐相似题目464. 我能赢吗877. 石子游戏 博弈 dp需要记录玩家的转换 下位 01 486. 预测赢家⭐ 思想⭐ dp定义的是当前玩家 如dp[i] 代表A 则dp[i 1] 代表…

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来&#xff0c;引发了业务模式与应用使用的巨大变革&#xff0c;掀起了各大企业对于多模态大模型的研究热潮。3月初&#xff0c;AnthropicClaude在官网正式发布Claude 3系列多模态大模型&#xff0c;据了解&#xff0c;该模型在多个维度上超越了GPT-4&#…

Open3D国内镜像源

pip install open3d -i https://mirrors.aliyun.com/pypi/simple/ 国内常用镜像源 清华大学 &#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/ 中国科学技术大学 &#xff1a;http://pypi.mirrors.ustc.edu.…

高铁列车员信息宣传向媒体投稿有哪些方法?

作为一名高铁列车工作人员,我肩负着传递高铁精神、展示列车员风采的重要使命。每月,我都要完成单位对外信息宣传的考核任务,通过媒体投稿来发表列车员的信息宣传文章。在这条信息宣传之路上,我经历了从摸着石头过河到智慧投稿的蜕变,其中的心酸与轻松交织,成为了我职业生涯中难…

在Linux中进行OpenSSH升级

由于OpenSSH有严重漏洞&#xff0c;因此需要升级OpenSSH到最新版本。 OpenSSL和OpenSSH都要更新&#xff0c;OpenSSH依赖于OpenSSL。 第一步&#xff0c;查看当前的OpenSSH服务版本。 命令&#xff1a;ssh -V 第二步&#xff0c;安装、启动telnet&#xff0c;关闭安全文件&a…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

2024年高校邦大学生职业生涯规划答案

2024年高校邦大学生职业生涯规划答案 2024年高校邦——大学生职业生涯规划答案 第一章 1多选 大学教育的价值是什么&#xff1f; A.丰富知识 B.完善人格 C.为未来的生活打下坚实基础 D.读研 答案&#xff1a;ABC 2单选 以下哪种不属于职业生涯规划的步骤&#xff1f…

如何设计一个高并发的系统--简谈

设计一个高并发系统可以从下面这些角度来考虑。 所谓设计高并发系统&#xff0c;就是设计一个系统&#xff0c;保证它整体可用的同时&#xff0c;能够处理很高的并发用户请求&#xff0c;能够承受很大的流量冲击。 我们要设计高并发的系统&#xff0c;那就需要处理好一些常见…

PHP过滤Emoji表情和特殊符号的方法

在PHP中&#xff0c;过滤掉昵称中的表情和特殊符号通常可以通过正则表达式来实现。PHP中的preg_replace函数可以使用正则表达式来搜索和替换字符串中的内容。 以下是一个例子&#xff0c;展示了如何移除字符串中的Emoji和特殊符号&#xff1a; function removeEmojiAndSpec…

Linux 命令或者一些工具

locale – 设置和显示程序运行的语言环境 locale -a | grep en_US.UTF-8.sudo locale-gen en_US.UTF-8sudo dpkg-reconfigure localesexpect 常用命令总结 expect命令spawnexpectsendexp_continuesend_userexit chrpath工具 chrpath 是一个用于修改可执行文件或共享库的运行…

JVM是如何运行的

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是 Java 程序的运行环境&#xff0c;它负责将 Java 字节码翻译成机器代码并执行。也就是说 Java 代码之所以能够运行&#xff0c;主要是依靠 JVM 来实现的。 JVM 整体的大概执行流程是这样的&#xff1…

国产AI视频技术迎来新成员Etna,4K 60帧 15秒超高清视频

国内AI视频技术领域传来好消息&#xff0c;一款名为Etna的AI视频生成工具引起了业界的广泛关注。这款由七火山公司开发的技术&#xff0c;号称能够实现15秒4K 60帧的超高清视频生成&#xff0c;让人眼前一亮&#xff01; &#x1f680; 国产技术的崛起 Etna的问世&#xff0c;…

C++高级面试题:解释 C++ 中的行为参数化(Behavioral Parameterization)

解释 C 中的行为参数化&#xff08;Behavioral Parameterization&#xff09; 行为参数化是一种编程模式&#xff0c;它允许在运行时动态地指定算法或函数的行为。在 C 中&#xff0c;行为参数化通常通过函数指针、函数对象&#xff08;Functors&#xff09;、Lambda 表达式等…

DLT算法求解单应性矩阵

DLT算法求解单应性矩阵 原理&#xff1a; 单应性矩阵描述了两个图像之间的投影变换关系&#xff0c;即从一张图到另一张图的变换。 下面是DLT算法的基本原理&#xff1a; 构建投影方程&#xff1a; 对于两个图像中的对应点 ( x , y , 1 ) (x, y, 1) (x,y,1) 和 ( u , v ,…

【JS】JavaScript 中 this 关键字

JavaScript 中 this 关键字 this 是什么this 的绑定规则this 的指向 this 是什么 this 是一个关键字&#xff0c;能够在函数执行过程中访问运行环境&#xff0c;它的值根据函数的调用方式和上下文而变化&#xff0c;所以 this 是动态的&#xff0c;动态指向当前函数的运行环境…

Lazada全托管是什么?Lazada全托管ERP哪个好用?

做工厂及拥有自有品牌的你&#xff0c;是否因为跨境的头程费用、仓储费用、尾程费用如何结算而烦恼&#xff1f;是否因为不懂市场、不懂运营、不够专业而对跨境电商领域望而却步&#xff1f;那么&#xff0c;你或许可以尝试全托管。 一、什么是全托管 全托管是近两年电商领域…

Python之函数进阶-柯里化

Python之函数进阶-柯里化 柯里化是一种将多参数函数转化为单参数高阶函数的技术。 具体来说&#xff0c;柯里化过程会将一个接受多个参数的函数&#xff0c;转换成一系列接受一个参数的函数&#xff0c;这些函数在内部组合起来&#xff0c;最终完成原函数的运算。 柯里化是一…

【一】【设计模式】类关系UML图

1. 继承&#xff08;Generalization&#xff09; 继承是对象间的一种层次关系&#xff0c;允许子类继承并扩展父类的功能。 UML线&#xff1a;带有空心箭头的直线&#xff0c;箭头指向基类&#xff08;父类&#xff09;。 class Parent {public void parentMethod() {System.…