图片编辑器tui-image-editor

提示:图片编辑器tui-image-editor

文章目录

  • 前言
  • 一、安装tui-image-editor
  • 二、新建components/ImageEditor.vue
  • 三、修改App.vue
  • 四、效果
  • 五、遇到问题 this.getResolve is not a function
  • 总结


前言

需求:图片编辑器tui-image-editor

一、安装tui-image-editor

npm install tui-image-editor --save

在这里插入图片描述

二、新建components/ImageEditor.vue

ImageEditor.vue

<template><div class="image_editor_box" ref="dcRef"><div id="tui_image_editor"></div><el-button class="image_save_btn" type="primary" size="small" @click="saveImage">保存</el-button></div></template><script>import 'tui-image-editor/dist/tui-image-editor.css'import 'tui-color-picker/dist/tui-color-picker.css'import ImageEditor from 'tui-image-editor'const locale = {//菜单ZoomIn: '放大',ZoomOut: '缩小',Hand: '抓手工具',History: '历史',Undo: '撤销',Redo: '恢复',Reset: '重置',Delete: '删除',DeleteAll: '全部删除',//工具栏//尺寸调整Resize: '尺寸',Width: '宽度',Height: '高度','Lock Aspect Ratio': '锁定宽高比例',Apply: '应用',Cancel: '取消',//镜像Flip: '镜像','Flip X': 'X 轴','Flip Y': 'Y 轴',//蒙版Mask: '蒙版','Load Mask Image': '上传蒙版图片',//裁剪Crop: '裁剪',Square: '正方形',// 旋转Rotate: '旋转',Range: '区间',//画笔Draw: '画笔',Free: '曲线',Straight: '直线',Color: '颜色',//图形Shape: '图形',Rectangle: '矩形',Circle: '圆形',Triangle: '三角形',Fill: '填充',Stroke: '描边',//图标Icon: '图标',Arrow: '箭头','Arrow-2': '箭头2','Arrow-3': '箭头3','Star-1': '五角星','Star-2': '多角形',Polygon: '多边形',Location: '定位',Heart: '心形',Bubble: '气泡','Custom icon': '自定义图标',//文字Text: '文字',Bold: '加粗',Italic: '斜体',Underline: '下划线',Left: '左对齐',Center: '居中',Right: '右对齐','Text size': '字体大小',//滤镜Filter: '滤镜',Grayscale: '灰度',Sepia: '棕色',Blur: '模糊',Emboss: '浮雕',Invert: '底片',Sepia2: '棕色2',Sharpen: '锐化','Remove White': '除去白色',Distance: '距离',Brightness: '亮度',Noise: '铜板雕刻',Pixelate: '马赛克','Color Filter': '彩色滤镜',Threshold: '阈值',Tint: '色调',Multiply: '正片叠底',Blend: '混合色',Custom: '自定义',load: '上传',download:'下载',}  const IThemeConfig = {//图标'common.bi.image': 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF','common.bisize.width': '30px','common.bisize.height': '30px',//编辑器背景// 'common.backgroundImage': 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF','common.backgroundColor': '#fff','common.border': '1px solid #eee',// 菜单栏样式// 'header.backgroundImage': 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF','header.backgroundColor': 'transparent','header.border': '0 solid #000',// 上传按钮'loadButton.backgroundColor': '#ecf5ff','loadButton.border': '1px solid #409EFF','loadButton.color': '#409EFF','loadButton.fontFamily': "'Noto Sans', sans-serif",'loadButton.fontSize': '12px',// 下载按钮'downloadButton.backgroundColor': '#409EFF','downloadButton.border': '1px solid #409EFF','downloadButton.color': '#fff','downloadButton.fontFamily': "'Noto Sans', sans-serif",'downloadButton.fontSize': '12px',// 工具栏icon'menu.normalIcon.color': '#7A8799','menu.activeIcon.color': '#409EFF','menu.disabledIcon.color': '#A2AEBF','menu.hoverIcon.color': '#323D4D','menu.iconSize.width': '24px','menu.iconSize.height': '24px',// 工具栏子菜单'submenu.normalIcon.color': '#7A8799','submenu.activeIcon.color': '#323D4D',// 工具栏子菜单icon'submenu.iconSize.width': '24px','submenu.iconSize.height': '24px',// 工具栏子菜单bg'submenu.backgroundColor': '#eee',// 工具栏子菜单分割线'submenu.partition.color': '#7A8799',//工具栏子菜单文字'submenu.normalLabel.color': '#7A8799','submenu.normalLabel.fontWeight': '400','submenu.activeLabel.color': '#323D4D','submenu.activeLabel.fontWeight': '400',// 工具栏子菜单多选框'checkbox.border': '1px solid #7A8799','checkbox.backgroundColor': '#fff',// 工具栏子菜单进度条--滑块'range.pointer.color': '#409EFF',// 工具栏子菜单进度条--底色'range.bar.color': '#A2AEBF',// 工具栏子菜单进度条--进度'range.subbar.color': '#409EFF',// 工具栏子菜单进度条--禁用'range.disabledPointer.color': '#A2AEBF','range.disabledBar.color': '#A2AEBF','range.disabledSubbar.color': '#7A8799',// 工具栏子菜单进度条--值'range.color': '#7A8799','range.value.color': '#323D4D','range.value.fontWeight': '400','range.value.fontSize': '11px','range.value.border': '1px solid #A2AEBF','range.value.backgroundColor': '#fff','range.title.fontWeight': '400',// 颜色选择器'colorpicker.button.border': '1px solid #A2AEBF','colorpicker.title.color': '#7A8799',
};export default {props:{defaultImg:{type:Object,default:()=>{return {}},},defaultColorArr:{type:Array,default:()=>{return []},}},data() {return {imgEditor: null}},watch:{defaultImg(){this.imgEditor&&this.imgEditor.loadImageFromURL(this.defaultImg.path,this.defaultImg.name);}},mounted() {this.init(this.defaultImg);},methods: {//初始化ImageEditorinit(defaultImg) {this.imgEditor = new ImageEditor(document.getElementById('tui_image_editor'), {includeUI: {//加载图片loadImage: { path:defaultImg.path, name: defaultImg.name },//尺寸  裁剪  旋转  画笔  图形  图标  文字  镜像  滤镜  蒙版menu: ['resize', 'crop', 'rotate', 'draw', 'shape', 'icon', 'text', 'flip', 'filter', 'mask'], //不初始化 filter mask// 默认工具initMenu: '',// 工具栏位置              menuBarPosition: 'bottom', // 语言locale: locale,// 主题            theme: IThemeConfig        },// 最大宽度cssMaxWidth: (this.$refs.dcRef.clientWidth||1000)-80,// 最大高度cssMaxHeight: (this.$refs.dcRef.clientHeight||600)-64-48-80,uiSize: {width: '1000px',height: '700px'},selectionStyle: {cornerSize: 20,rotatingPointOffset: 70},picker:{}});//Load按钮文案改成上传const load = document.querySelector('.tui-image-editor-header-buttons>div');load.innerHTML = load.innerHTML.replace('Load','上传');//Download按钮文案改成下载const download = document.querySelector('.tui-image-editor-header-buttons .tui-image-editor-download-btn');download.innerHTML = "下载";},// 保存批注的图片saveImage() {let base64Str = this.imgEditor.toDataURL();let blob = this.base64ToBlob(base64Str);console.log(base64Str,blob);this.$emit('saveEditImgSrc',base64Str);},//base64转换成blobbase64ToBlob(base64Str) {let arr = base64Str.split(",");let type = arr[0].match(/:(.*?);/)[1];let bstr = atob(arr[1]);let n = bstr.length;let u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type });}}}</script><style lang="scss" scoped>.image_editor_box {height: 100%;width: 100%;position: relative;.image_save_btn {position: absolute;width: 120px;height: 40px;right: 260px;top: 9px;background-color: #409EFF;border: 1px solid #409EFF;color: #fff;font-family: 'Noto Sans', sans-serif;font-size: 12px;border-radius: 40px;}}</style><style>/** 隐藏图标和上传下载按钮 **/.image_editor_box .tui-image-editor-header-logo,.image_editor_box .tui-image-editor-header-buttons{/* display: none!important; */}/* 调整图片显示位置 */.image_editor_box .tui-image-editor-main{top:48px!important;height:auto!important;}.image_editor_box .tui-image-editor-container .tui-image-editor-range-wrap label{color: #7A8799;}.image_editor_box .tui-image-editor-container .tui-image-editor-checkbox label > span {color: #7A8799;}.image_editor_box .tui-image-editor-container .tui-image-editor-controls{background-color: #fcfcfc;border:1px solid #eee;border-top:0;}.image_editor_box .tui-image-editor-help-menu.top{border:1px solid #eee;background: #fcfcfc;}</style>

在这里插入图片描述

三、修改App.vue

App.vue

<template><div id="app"><div class="img_mark_box"><div class="img_mark_l"><div class="img_mark_img" v-for="item,index in imgArr" :key="index" @click="changeImg(item)"><img :src="item.path" alt=""></div></div><div class="img_mark_m"><ImageEditor :defaultImg="activeImg" @saveEditImgSrc="saveEditImgSrc"></ImageEditor></div><div class="img_mark_r"><img :src="editImgSrc" alt=""></div></div></div>
</template><script>
import ImageEditor from "./components/ImageEditor";
export default {name: 'App',components:{ImageEditor},data(){return {activeImg:'',editImgSrc:'',imgArr:[{path:require('@/assets/test.jpg'),name:'图片1'},{path:`data:image/jpeg;base64,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`,name:'图片2'},{path:'https://t7.baidu.com/it/u=1819248061,230866778&fm=193&f=GIF',name:'图片3'},{path:'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF',name:'图片4'},{path:'https://t7.baidu.com/it/u=825057118,3516313570&fm=193&f=GIF',name:'图片5'},{path:'https://t7.baidu.com/it/u=602106375,407124525&fm=193&f=GIF',name:'图片6'},{path:'https://t7.baidu.com/it/u=55748064,2074988836&fm=193&f=GIF',name:'图片7'},],}},created(){this.activeImg = this.imgArr[0];},methods:{changeImg(item){this.activeImg = item;},saveEditImgSrc(src){this.editImgSrc = src;},}
};
</script><style scoped >
.img_mark_box {position: absolute;top: 0;left: 0;bottom: 0;right: 0;padding: 0 200px 0 300px;box-sizing: border-box;
}
.img_mark_l,.img_mark_r{position: absolute;top: 0;bottom: 0;
}
.img_mark_l{left: 0;width: 300px;box-sizing: border-box;padding: 20px 10px;
}
.img_mark_img{height: 80px;box-sizing: border-box;vertical-align: middle;margin-bottom: 10px;overflow: hidden;border: 1px solid #eee;border-radius: 8px;cursor: pointer;
}
.img_mark_img>img{width: 100%;height: 100%;
}
.img_mark_r{right: 0;width: 200px;box-sizing: border-box;padding: 20px 10px;
}
.img_mark_r>img{width: 100%;
}
.img_mark_m{width: 100%;height: 100%;
}
</style>

在这里插入图片描述

四、效果

在这里插入图片描述

五、遇到问题 this.getResolve is not a function

问题:
在这里插入图片描述

sass-loader 版本过高,导致tui-image-editor的css无法解析

解决方案:

npm install sass-loader@7.3.1 --save-dev

报错内容:

Module build failed: TypeError: this.getResolve is not a functionat Object.loader (D:\node_modules\sass-loader\dist\index.js:52:26)@ ./node_modules/vue-style-loader!./node_modules/css-loader?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-4913b0a8","scoped":true,"hasInlineConfig":false}!D:/node_modules/sass-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/components/ImageEditor.vue 4:14-385 13:3-17:5 14:22-393@ ./src/components/ImageEditor.vue@ ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue@ ./src/App.vue@ ./src/main.js@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js

总结

踩坑路漫漫长@~@

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

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

相关文章

【李沐精读系列】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…

javaSE-----继承和多态

目录 一.初识继承&#xff1a; 1.1什么是继承&#xff0c;为什么需要继承&#xff1a; 1.2继承的概念与语法&#xff1a; 二.成员的访问&#xff1a; 2.1super关键字 2.2this和super的区别&#xff1a; 三.再谈初始化: 小结&#xff1a; 四.初识多态&#xff1a; 4.1多…

100. 相同的树

代码实现&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool compare(struct TreeNode *tree1, struct TreeNode *tree2) {if (tree1 NULL && tree2 ! NU…

防御保护第七次作业-IPSEC VPPN实验

&#xff08;场景选用点到点&#xff0c;配置好FW1的出接口地址和对端FW3的接口地址&#xff0c;认证方式选用预共享密钥&#xff0c;身份认证选用IP地址&#xff09; 1、FW1 IP Sec策略配置 IKE参数配置&#xff1a; IP Sec参数&#xff1a; FW2配置&#xff1a; 加密数据流配…

SpringBoot 热部署。

SpringBoot 热部署。 文章目录 SpringBoot 热部署。 pom.xml。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional…

Jmeter二次开发实现rsa加密

jmeter函数助手提供了大量的函数&#xff0c;像 counter、digest、random、split、strLen&#xff0c;这些函数在接口测试、性能测试中大量被使用&#xff0c;但是大家在实际工作&#xff0c;形形色色的测试需求不同&#xff0c;导致jmeter自带或者扩展插件给我们提供的函数无法…

React-子传父

1.概念 说明&#xff1a;React中子组件向父组件传递数据通常涉及回调函数和状态提升等方法。 2.代码实现 2.1绑定事件 说明&#xff1a;父组件绑定自定义事件 <Son onGetSonMsg{getMsg}></Son> 2.2接受事件 说明&#xff1a;子组件接受父组件的自定义事件名称…

数据结构与算法-插值查找

引言 在计算机科学的广阔天地中&#xff0c;数据结构和算法扮演着至关重要的角色。它们优化了信息处理的方式&#xff0c;使得我们在面对海量数据时能够高效、准确地进行检索与分析。本文将聚焦于一种基于有序数组且利用元素分布规律的查找算法——插值查找&#xff08;Interpo…

tomcat基础介绍

目录 一、Tomcat的基本介绍 1、Tomcat是什么&#xff1f; 2、Tomcat的配置文件详解 3、Tomcat的构成组件 6、Tomcat的请求过程 一、Tomcat的基本介绍 1、Tomcat是什么&#xff1f; Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器…

C++核心编程之内存分区模型,引用,函数提高

1&#xff0c;类型分区模型 c程序在执行中&#xff0c;将内存大方向划分为4个区域 1&#xff0c;代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的 2&#xff0c;全局区&#xff1a;存放全局变量和静态变量以及常量 3&#xff0c;栈区&#xff1…

【性能测试】Jmeter性能压测-阶梯式/波浪式场景总结(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、阶梯式场景&am…

IDEA中四款代码补全的插件

说明&#xff1a;本文介绍四款IDEA中代码补全的插件及使用感受&#xff0c;插件如下&#xff1a; 以下插件都在2023.2版本的IDEA中安装使用的&#xff0c;旧版本IDEA可能无法使用。 Tabnine 在IDEA的插件商店中安装&#xff0c;官网&#xff08;https://www.tabnine.com/&…

ai智能写作软件推荐,ai一键生成作文

很多小伙伴们都觉得写作是一件让人头痛的事情。因为不仅要让自己的文字流畅有条理&#xff0c;还需要通过一些修辞手法来使文章更加生动有趣。市场上不断涌现出各种各样的AI人工智能原创文章写作平台&#xff0c;哪些才好用&#xff0c;才是适合自己的呢&#xff1f; 爱制作ai …

Z Potentials | 星爵,他的征途不止向量数据库

纵观过去几十年的科技发展史&#xff0c;每一代新的技术架构的出现往往都伴随着新的数据范式的出现&#xff0c;也催生了多家百亿到千亿美金数据平台的诞生。如果说 2023 年科技领域的关键词是 LLM&#xff0c;那么数据库领域的关键词一定非向量数据库莫属。向量数据库是一种专…

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面&#xff0c;我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突&#xff0c;每个哈希表节点都有一个next指针&#xff0c;多个哈希表节点可以…

egg如何写单元测试

优秀的代码需要有单元测试进行质量保证&#xff0c;每个测试用例都给应用的稳定性提供了一层保障。 测试目录结构 我们约定 test 目录为存放所有测试脚本的目录&#xff0c;测试所使用到的 fixtures 和相关辅助脚本都应该放在此目录下。 测试文件的目录和我们需要测试的文件目…

#QT(智能家居界面-界面切换)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;创建一个新界面&#xff08;UI界面&#xff09; &#xff08;2&#xff09;可以看到新加入一个ui文件&#xff0c;双击打开&#xff0c;设置窗口大小与登录界面一致 &#xff08;3&#xff09;加入几个PUS…

【NR 定位】3GPP NR Positioning 5G定位标准解读(一)

目录 前言 1. 3GPP规划下的5G技术演进 2. 5G NR定位技术的发展 2.1 Rel-16首次对基于5G的定位技术进行标准化 2.2 Rel-17进一步提升5G定位技术的性能 3. Rel-18 关于5G定位技术的新方向、新进展 3.1 Sidelink高精度定位功能 3.2 针对上述不同用例&#xff0c;3GPP考虑按…

力扣经典题目解析--反转链表

原题地址: . - 力扣&#xff08;LeetCode&#xff09; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 题目解析 链表&#xff08;Linked List&…

【Unity】ABB CRB 15000 外部引导运动

一、RobotStudio控制器的文件系统和配置参数 HOME&#xff1a;控制器文件系统的根目录或起始点。配置&#xff1a;机器人控制器的配置设置和参数。外件信息&#xff1a;连接到机器人的外部组件的信息。I/O 系统&#xff1a;输入/输出系统&#xff0c;管理机器人和外部设备之间的…