vue3中使用el-upload + tui-image-editor进行图片处理

效果如下
在这里插入图片描述

看之前请先看上一篇《vue3中使用组件tui-image-editor进行图片处理》中的
1、第一步安装
2、第二部封装组件
本篇只是在这基础上结合el-upload使用组件
3、第三步结合el-upload使用组件

<template><el-dialog:title="dialogTitle":modelValue="dialogVisible"width="55%"top="4vh":before-close="closeDialog":close-on-click-modal="false"destroy-on-close><div class="newBox"><el-uploadclass="img-edit":show-file-list="false":accept="cropperObj.accpetType":limit="cropperObj.limit":on-change="cropperObj.handleAvatarSuccess":before-upload="cropperObj.beforeAvatarUpload":disabled="cropperObj.dealPicShow"><div class="imgCorpper" v-if="cropperObj.dealPicShow"  @mouseenter="cropperObj.buttonopen" @mouseleave="cropperObj.buttonexit"><div class="imgCorpperY"><el-image  :src="cropperObj.previewViewer":zoom-rate="1.2":preview-src-list="cropperObj.srcList":initial-index="4"fit="cover"/> <el-image-viewerv-if="cropperObj.showImageViewer"@close="cropperObj.closeImgView":url-list="cropperObj.srcList"/><div :class="cropperObj.showBack?'imgcurrent show':'imgcurrent'"  ><div class="imgBack"></div><div class="imgicon"><el-icon @click="cropperObj.showPic"><ZoomIn /></el-icon><el-icon @click="cropperObj.delePic"><Delete /></el-icon></div></div></div></div><el-icon v-else class="img-edit-icon"><Plus /></el-icon></el-upload><!-- 上传提示 --><div class="el-upload__tip" v-if="!cropperObj.dealPicShow">请上传大小不超过 <b style="color: #f56c6c">{{ cropperObj.fileSize }}MB</b>格式为 <b style="color: #f56c6c">{{ cropperObj.fileType.join("/") }}</b>的文件</div><!-- 图片处理框 --><SignImage v-if="cropperObj.cVisible" :dialogVisible.sync="cropperObj.cVisible" :title="cropperObj.ctitle":imgUrl="cropperObj.previewsImgUrl"@getNewImg="cropperObj.getNewImg"@closeCropperDialog="cropperObj.closeCropperView"></SignImage></div><template #footer><div class="dialog-footer"><!-- <el-button class="btn-sure" type="primary" @click="closeDialog">确 定</el-button> --><el-button @click="closeDialog">取 消</el-button></div></template></el-dialog>
</template><script setup>
import SignImage from '@/components/SignImage/index.vue'
import { importNewImg, editNewImg } from "@/api/back/home.js";
import { ref, reactive, watch } from "vue";const props = defineProps({dialogVisible: {type: Boolean,default: false,},dialogTitle: {type: String,default: "",},});// 关闭弹窗const emits = defineEmits(["closeDialog"]);const closeDialog = () => {emits("closeDialog");};// new 背景图片
const cropperObj = reactive({fileType: ["png", "jpg", "jpeg"],accpetType:".png,.jpg,.jpeg",limit:1,fileSize:10,cVisible:false, // 显示切图弹框ctitle:"", // 弹框标题imgShow:false, //是否有图片previewsImgUrl:"", //图片地址srcList:[], //图片预览地址数组showBack:false, // 预览删除图层是否展示showImageViewer:false, // 是否预览previewViewer:"", // 处理后的图片地址dealPicShow:false, // 是否删除了处理后的图片// 开启编辑弹框openCropperView: () => {cropperObj.ctitle="图片"cropperObj.cVisible = true },// 关闭编辑弹框所触发的事件closeCropperView: (data)=> {cropperObj.cVisible = false},// 预览删除图层显示buttonopen: ()=>{cropperObj.showBack = true},// 预览删除图层隐藏buttonexit: ()=>{cropperObj.showBack = false},// 预览开启showPic: ()=>{cropperObj.showImageViewer = true},// 预览隐藏closeImgView: ()=>{cropperObj.showImageViewer = false},// 删除图片delePic:()=>{cropperObj.previewsImgUrl ="";cropperObj.previewViewer = ""cropperObj.srcList=[]setTimeout(function(){cropperObj.dealPicShow = false},1000)cropperObj.imgShow = false// formData.backgroundUrl = "";},// 获取处理完的图片getNewImg:(val) =>{cropperObj.previewViewer = window.serverUrl.IMG_SERVER + valcropperObj.dealPicShow = truecropperObj.srcList=[cropperObj.previewViewer]// formData.backgroundUrl = val;},beforeAvatarUpload:(file)=> {let isImg = false;let fileExtension = "";if (cropperObj.fileType.length) {if (file.name.lastIndexOf(".") > -1) {fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);}isImg = cropperObj.fileType.some((type) => {if (file.raw.type.indexOf(type) > -1) return true;if (fileExtension && fileExtension.indexOf(type) > -1) return true;return false;});} else {isImg = file.type.indexOf("image") > -1;}if (!isImg) {ElMessage.error(`格式不正确, 请上传${cropperObj.fileType.join("/")}图片格式文件!`);return false;} else {isImg = true;}if (cropperObj.fileSize) {const isLt = file.size / 1024 / 1024 < cropperObj.fileSize;if (!isLt) {proxy.$modal.msgError(`上传大小不能超过 ${cropperObj.fileSize} MB!`);// fileList.value = [];return false;}}},handleAvatarSuccess:(file, fileList)=> {const bgFormData = new FormData()bgFormData.append("file", file.raw);importNewImg(bgFormData).then(res => {cropperObj.previewsImgUrl = window.serverUrl.IMG_SERVER + res.fileNamecropperObj.ctitle="图片处理"cropperObj.cVisible = true })},
})</script><style lang="scss"  scoped>.img-edit{display: flex;justify-content: center;align-items: center;font-size:1rem;width:148px;height: 148px;border:1px dashed #cdd0d6;position: relative;border-radius: 6px;.el-icon{width:0.35rem;height: 0.35rem;color:#909399;}.imgCorpper{display: flex;justify-content: center;align-items: center;font-size:1rem;width:148px;height: 148px;border:1px dashed #cdd0d6;position: relative;border-radius: 6px;cursor:pointer;.el-icon{width:0.35rem;height: 0.35rem;color:#909399;}.imgCorpperY{position: relative;width: 100%;height: 100%;border-radius: 6px;overflow: hidden;height: 100%;;>img{width: 100%;height: 100%;;}.el-image{width: 100%;height: 148px;max-height: 100%;;}.imgcurrent{display: none;position: absolute;width: 100%;height: 100%;top: 0;.imgBack{background: #00000082;width: 100%;height: 100%;position: absolute;z-index: 1;}.imgicon{position: absolute;width: 60%;margin: 0 20%;height: 100%;display: flex;justify-content: space-between;align-items: center;color: #fff;z-index: 2;.el-icon{color: #fff;// font-size: 1rem;}}}>.show{display:block;}}}}.img-edit:hover {border-color: #409EFF;}
</style>

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

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

相关文章

常见的API

常见的 API Math 从 JDK 版本 1 开始的, 用来计算的一些方法 这里面定义了两个常量的 PI 和 E 这两个是最接近 pi 的值和最接近对数的值 Abs (int a ) 取绝对值Ceil (double a)向上取整Floor (double a )向下取整Round (float a)四舍五入Max (int a, int b) 取最大值Pow (dou…

【微信小程序】文章设置

设置基本字体样式&#xff1a;行高、首行缩进 font-size: 32rpx;line-height: 1.6em;text-indent: 2em;padding: 20rpx 0;border-bottom: 1px dashed var(--themColor); 两端对齐 text-align: justify; css文字两行或者几行显示省略号 css文字两行或者几行显示省略号_css…

【C进阶】指针和数组笔试题解析

做题之前我们先来回顾一下 对于数组名的理解&#xff1a;除了以下两种情况&#xff0c;数组名表示的都是数组首元素的地址 &#xff08;1&#xff09;sizeof&#xff08;数组名&#xff09;&#xff1a;这里的数组名表示整个数组 &#xff08;2&#xff09;&&#xff08;数…

Kakfa - Producer机制原理与调优

Producer是Kakfa模型中生产者组件&#xff0c;也就是Kafka架构中数据的生产来源&#xff0c;虽然其整体是比较简单的组件&#xff0c;但依然有很多细节需要细品一番。比如Kafka的Producer实现原理是什么&#xff0c;怎么发送的消息&#xff1f;IO通讯模型是什么&#xff1f;在实…

Prometheus黑盒测试模块,监控TCP端口+ HTTP/HTTPS路由状态

文章目录 一、黑盒测试使用场景二、安装blackbox-exporter三、监控TCP端口四、监控HTTP/HTTPS路由五、最后分享几款Grafana模板 一、黑盒测试使用场景 官方下载地址 blackbox-exporter是Prometheus官方提供的一个黑盒测试的解决方案&#xff0c;可用于以下使用场景&#xff1a…

大数据-玩转数据-Flink恶意登录监控

一、恶意登录 对于网站而言&#xff0c;用户登录并不是频繁的业务操作。如果一个用户短时间内频繁登录失败&#xff0c;就有可能是出现了程序的恶意攻击&#xff0c;比如密码暴力破解。 因此我们考虑&#xff0c;应该对用户的登录失败动作进行统计&#xff0c;具体来说&#x…

SpringBoot启动方式

SpringBoot启动方式 springboot的启动经过了一些一系列的处理&#xff0c;我们先看看整体过程的流程图 SpringBoot的启动方式 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><…

线性代数基础-矩阵

八、矩阵的基础概念 1.矩阵 我们忘掉之前行列式的一切&#xff0c;列一种全新的数表&#xff0c;虽然长得很像&#xff0c;但是大不相同&#xff0c;首先一个区别就是矩阵不能展开成一个值&#xff0c;这里不讨论矩阵的空间意义 { a 11 x 1 a 12 x 2 a 13 x 3 . . . a 1…

求解灰度直方图,如何绘制灰度直方图(数字图像处理大题复习 P1)

文章目录 1. 画 X 轴2. 画直方图3. Complete 视频原链接 数字图像处理期末考试大题 B站链接 1. 画 X 轴 2. 画直方图 有几个 0 就在图上画多高&#xff0c;同理有几个 1 &#xff0c;X1 的地方就画多高 3. Complete 这里的情况比较平均&#xff0c;一般来说不会这么平均&a…

CSS选择器笔记

A plate #id #fancy A B plate apple #id A #fancy pickle .classname .small A.className orange.small #id.className #big.wide A,B both plate,bento * all A * plate * AB 紧跟在盘子后的苹果 plate apple A~B 跟在盘子后面所有的泡菜 plate~b…

堆内存与栈内存

文章目录 1. 栈内存2. 堆内存3. 区别和联系参考资料 1. 栈内存 栈内存是为线程留出的临时空间 每个线程都有一个固定大小的栈空间&#xff0c;而且栈空间存储的数据只能由当前线程访问&#xff0c;所以它是线程安全的。栈空间的分配和回收是由系统来做的&#xff0c;我们不需…

LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

Qt基于paintEvent自定义CharView

Qt基于paintEvent自定义CharView 鼠标拖动&#xff0c;缩放&#xff0c;区域缩放&#xff0c; 针对x轴&#xff0c;直接上代码 charview.h #ifndef CHARVIEW_H #define CHARVIEW_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #inclu…

unity学习第1天

本身也具有一些unity知识&#xff0c;包括Eidtor界面使用、Shader效果实现、性能分析&#xff0c;但对C#、游戏逻辑不太清楚&#xff0c;这次想从开发者角度理解游戏&#xff0c;提高C#编程&#xff0c;从简单的unity游戏理解游戏逻辑&#xff0c;更好的为工作服务。 unity201…

CMU 15-445 Project #3 - Query Execution(Task #1、Task #2)

文章目录 一、题目链接二、准备工作三、SQL 语句执行流程四、BusTub 表结构五、Task #1 - Access Method Executors5.1 顺序扫描执行器5.2 插入执行器5.3 删除执行器5.4 索引扫描执行器 六、Task #2 - Aggregation & Join Executors6.1 聚合执行器6.2 循环连接执行器6.3 索…

python 二手车数据分析以及价格预测

二手车交易信息爬取、数据分析以及交易价格预测 引言一、数据爬取1.1 解析数据1.2 编写代码爬1.2.1 获取详细信息1.2.2 数据处理 二、数据分析2.1 统计分析2.2 可视化分析 三、价格预测3.1 价格趋势分析(特征分析)3.2 价格预测 引言 本文着眼于车辆信息&#xff0c;结合当下较…

Linux的调试工具 - gdb(超详细)

Linux的调试工具 - gdb 1. 背景2. 开始使用指令的使用都用下面这个C语言简单小代码来进行演示&#xff1a;1. list或l 行号&#xff1a;显示文件源代码&#xff0c;接着上次的位置往下列&#xff0c;每次列10行。2. list或l 函数名:列出某个函数的源代码。3. r或run: 运行程序。…

7.前端·新建子模块与开发(自动生成)

文章目录 学习地址视频笔记自动代码生成模式开发增删改查功能调试功能权限分配 脚本实现权限分配 学习地址 https://www.bilibili.com/video/BV13g411Y7GS/?p15&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 视频笔记 自动代码生成模式开发 …

简单返回封装实体类(RespBean)

RespBean的作用 返回状态码&#xff0c;返回信息&#xff0c;返回数据 package com.example.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class RespBean {private lon…

AndroidStudio 安装与配置【安装教程】

1.下载软件 进入官网https://developer.android.google.cn/studio&#xff0c;直接点击下载 2.阅读并同意协议书 直接下滑至最底部 如果这里出现了无法访问 官方地址&#xff1a;https://redirector.gvt1.com/edgedl/android/studio/install/2022.3.1.19/android-studio-2022.…