裁剪图片vue-cropper实例 基础功能 预览 获取裁剪后图片数据

2023-11-15

在项目中使用到了裁剪图片功能,通过vue-croppe实现

安装和引入

# npm 安装
npm install vue-cropper
# yarn 安装
yarn add vue-cropper

项目中引用引入,这里我的项目是 vue2

// 组件中
import { VueCropper }  from 'vue-cropper' 
components: {
  VueCropper
}
// 全局
import VueCropper from 'vue-cropper'
Vue.use(VueCropper)

配置项(常用)

在这里插入图片描述

实例

html

 <el-tab-pane label="病理结果展示" name="third" style="pointer-events: auto;">
            <el-row :gutter="20">
              <el-col :span="11">
                <el-upload
                  action="#"
                  :http-request="ringrequestUpload"
                  :show-file-list="false"
                  :before-upload="ringbeforeUpload"
                  accept=" .jpeg, .jpg, .png, .JPG, .JPEG, .PNG"
                  :on-change="changeImgClick"
                  :on-success="handleAvatarSuccess"
                >
                  <el-button type="primary" size="small">原图片设置</el-button>
                </el-upload>
              </el-col>
            </el-row>
            <el-row :gutter="20">
              <el-col :span="4" class="imagesStyle">
                <h4>病理结果图片:</h4>
                <img
                  :src="ringoptions.img"
                  alt=""
                  class="oImg"
                  @click="changeImageUrl"
                />
              </el-col>
              <!-- <div @click="tailoring">裁剪</div> -->
              <el-col :span="14" style="text-align: center" class="oSpan">
                <h4>切割图片操作</h4>
                <vue-cropper
                  ref="ringcropper"
                  :img="ringoptions.img"
                  :info="true"
                  :autoCrop="ringoptions.autoCrop"
                  :fixedBox="ringoptions.fixedBox"
                  :canScale="ringoptions.canScale"
                  :original="ringoptions.original"
                  :canMove="ringoptions.canMove"
                  :infoTrue="ringoptions.infoTrue"
                  :outputSize="ringoptions.outputSize"
                  :autoCropWidth="ringoptions.autoCropWidth"
                 :autoCropWidth="ringoptions.autoCropWidth"
                  :autoCropHeight="ringoptions.autoCropHeight"
                  :canMoveBox="ringoptions.canMoveBox"
                  @realTime="ringrealTime"
                  style="
                    border: 1px dashed #000;
                    width: 100%;
                    height: 100%;
                    min-height: 1000px;
                    background-image: none;
                  "
                /> 
                <p>
                  <span style="color: #d9001b; font-size: 14px"
                    >说明:选择需要切割的图片,用鼠标拖拽选取切割区域范围,点击确定按钮,图片修改完成。</span
                  >
                </p>
                <div>
                  <el-button type="primary" @click="cancleOperation">取 消</el-button>
                  <el-button type="primary" @click="ringuploadImg()">确 定</el-button>
                </div>
              </el-col>
              <el-col :span="6">
                <h4>修改后的图片:</h4>
                <div class="avatar-upload-ringpreview">
                  <!-- 预览图片 --> 
                  <div :style="{ width:'350px', height: '300px'}" >
                    <div v-html="previewHTML" v-if="imageUrl"></div>
                  </div>
                  <!-- 截图结果展示 -->
                  <img :src="imageBase64" :style="screenshotViews.img" @click="modifyImageUrl" class="imgStyle"/>  
                </div>
                <br>
                <div v-if="screenshotResults">
                  <h4>最新截图结果:</h4>
                  <div class="avatar-upload-ringpreview">
                    <!-- 图片预览 -->
                    <img :src="RecentScreenshots" :style="ringpreviews.img" alt="" class="RecentScreenImage">
                  </div>
                </div>
              </el-col>
            </el-row>
          </el-tab-pane>
  • js
 // 弹出层标题
      ringoptions: {
        img: null, //裁剪图片的地址
        autoCrop: true, // 是否默认生成截图框
        autoCropWidth: 400, // 默认生成截图框宽度
        autoCropHeight: 300, // 默认生成截图框高度
        fixedBox: false, // 固定截图框大小 不允许改变
        outputType: "png", // 固定截图框大小 不允许改变
        size: 1,
        outputSize: 1, // 裁剪生成图片的质量 0.1 - 1
        full: false,
        canMove: false, //上传图片是否可以移动 默认true
        original: false, // 上传图片按照原始比例渲染	false	true | false
        canMoveBox: true, //截图框能否拖动	true	true | false
        high: true,
        infoTrue: true, // 为展示真实输出图片宽高 false 展示看到的截图框宽高	false	true | false
        downImg: "#",
        fixed: true, //是否开启截图框宽高固定比例
        canScale: false, // 图片是否允许滚轮缩放 默认true
        maxImgSize: 3000, // 图片最大像素
        fixedNumber: [1, 1], // 截图框的宽高比例 [宽度, 高度]
        }
      ringpreviews: {}, //预览控件
      screenshotViews: {}, // 截图前
  • script
 // 上传预处理
    ringbeforeUpload(file) {
      if (file.type.indexOf("image/") == -1) {
        this.$modal.msgError(
          "文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"
        );
      } else {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => {
          this.ringoptions.img = reader.result;
        };
      }
    },
    // 上传图片
    ringrequestUpload(obj) {
        let fd = new FormData();
        fd.append('file', obj.file); //参数
        fd.append("IsVal", "true")
        fd.append("appUnid", this.data.unid); 
        UploadImage(fd).then((res) => {
            if (res.code === 200) {
              this.ImageLis()
              this.$message.success("原图上传成功");
            }
        })
    },
    // 确定按钮方法,点击确定,对应的截图发生改变
    ringuploadImg() {
      if (this.ringoptions.img) {
        this.$refs.ringcropper.getCropBlob((data) => {
          let formData = new FormData(); 
          let file = this.blobToFile(data, "filename.jpg");
          formData.append("file", file);
          formData.append("IsVal", "false");
          formData.append("appUnid", this.data.unid);
          UploadImage(formData).then((res) => {
            if (res.code === 200) { 
              this.$message.success("上传成功");
              this.ImageLis() // 截图实时更新接口
            }
          });
        });
      }
    },
    // /实时预览
    ringrealTime(data) { 
        this.previewHTML = data.html
        this.ringpreviews = data; 
    },

注意事项:

  • 1.手写input需要使用一个FormData对象来转换格式,而vant的file是已经转换好的
  • 2.这个转换过的格式,就是一个对象,直接将整个对象当成data参数传递即可,具体情况看项目接口而定
  • 3.传递过后,后台会返回数据,其中的data.path就是修改后的图片的网址链接
  • 4.有些项目如果后台没有处理的话,需要我们再次将这个图片地址,传递给修改用户信息的接口,已达到修改图片的目的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

裁剪图片vue-cropper实例 基础功能 预览 获取裁剪后图片数据 的相关文章

随机推荐

  • 五大学科竞赛(二)NIOP全国青少年信息学奥林匹克分区联赛竞赛大纲

    一 初赛内容与要求 表示普及组不涉及 以下同 计 基 算 本 机 常 的 识 诞生与发展 特点 在现代社会中的应用 计算机系统的基本组成 计算机的工作原理 计算机中的数的表示 计算机信息安全基础知识 计算机网络 计 基 算 本 机 操 的
  • IDEA使用JDBC连接MySQL数据库详细教程

    文章目录 创建项目 导入驱动 让导入的驱动生效 注册数据库驱动 连接数据库 创建项目 首先需要保证你已经成功安装mysql和下载连接MySQL数据库的驱动 在IDEA里面创建一个java项目 选择创建Java项目 JDK这里选择1 8 直接
  • 二进制文件与文本文件详解

    二进制文件 定义 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放 即存放的是数据的原形式 二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件 一般是可执行程序 图形 声音等文件 有自
  • LeetCode 4 - 寻找两个正序数组的中位数

    二分 递归 如果某个有序数组长度是奇数 那么其中位数就是中间元素 如果长度是偶数 那么中位数就是中间两个数字的平均值 假设两个有序数组的长度分别为 m 和 n 由于两个数组长度之和 m n 的奇偶不确定 为了简化代码 在合并后的数组找到第
  • Android 环信的简单使用

    最近在项目中用到了即使用讯 客户要求用环信 我擦 第一次做 坑啊 网上对这个没有特别明确的使用教程 环信的官网也不像其他的第三方有明确的使用方法 只是说了一个简单的集成 看其他人的博客感觉都说的很麻烦 很含糊 所以现在项目完成了 做个简单的
  • MySQL数据库更换数据路径

    1 路径 原路径 datadir var lib mysql socket var lib mysql mysql sock log error var log mysqld log 更换后目标路径 datadir home mysql s
  • win10 python永久换源-- 解决VSCode配置ESP IDF到最后python virtual environment 错误 问题

    运行shell 找到 python 的 Scripts 文件夹下 例如 cd F ESP VSC ESP32 ENV python env idf4 4 py3 8 env Scripts 执行它 pip config set global
  • HTML静态网页设计基础

    如何新建一个HTML文件 答 1 新建一个TXT文件 2 打开TXT文件后 输入网页基本结构 另存为 可得到 回答over 下一步 html静态网页的基本结构 以及插入图片 插入超链接 分段 换行 标题号 表格标签 标题号 h2 第二分网页
  • java和bootstrap实现行内编辑

    实现BootstrapTable单个单元格编辑后立马提交保存 批量编辑已经选中的单元格后提交保存的实现 排序有点乱了 随便记一下吧 大概就是引入这三个文件 首先引入x editable相关的js css文件
  • unity Shader实现半透明阴影

    在shader中 要对移动端的兼容 还不想实现两套分开兼容的话 pragma exclude renderers gles gles3 glcore pragma target 4 5 这两句话一定要改掉 第一行代码直接剔除了gles的渲染
  • CStdioFile扩展(支持Ansi、Unicode、Utf-8等文本格式)

    头文件声明 CStdioFileEx h StdioFileEx h interface for the CStdioFileEx class Version 1 1 23 August 2003 Incorporated fixes fr
  • 防抖和节流怎么做

    防抖和节流都是为了控制代码执行频率 提高性能和用户体验 防抖和节流的区别在于 防抖是在一定时间内只执行最后一次操作 而节流是在一定时间内只执行一次操作 下面是防抖和节流的代码实现 防抖 function debounce fn delay
  • AdapterViewFlipper和StackView的使用

    练习使用AdapterViewFlipper 1 xml布局文件
  • 20230903-闹钟

    app cpp include app h include ui app h int k1 true APP APP QWidget parent QWidget parent ui new Ui APP ui gt setupUi thi
  • IDEA编译器中关闭包显示并排的问题

    问题 IDEA编译器默认是包并排显示 不好操作 解决 取消Compact Middle Packages打勾就可以了
  • CMOS图像传感器——TOF 图像传感器

    一 3D成像技术概述 图像传感器一直以来都是人类研究的热点 但随着当代科学技术发展 人类对于传统的 2D 图像传感器的要求越来高 不仅期望着更高分辨率 更快速度 更大的动态范围 人类加希望能够获得物体深信息 但是 2D 成 像技术现在已经不
  • 接口测试与功能测试的区别~

    今天为大家分享的是我们在日常测试工作中 一定会接触并且目前在企业中是主要测试内容的 功能测试与接口测试 一 功能测试与接口测试的基本概念 1 1 什么是功能测试呢 功能测试 是黑盒测试的一方面 检查实际软件的功能是否符合用户的需求 功能测试
  • 【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 设计模式 牛客面试题 目录 一 基础 1 1 请你说说Java的特点和优点 为什么
  • 方法的重写和重载

    1 重载是在本类中的 就是同一个方法名而内容不一样的方法 也就是同名 同类型的方法 返回类型可以不考虑 允许存在多个同名方法 public void show int int 这个方法名 public void show int int i
  • 裁剪图片vue-cropper实例 基础功能 预览 获取裁剪后图片数据

    在项目中使用到了裁剪图片功能 通过vue croppe实现 安装和引入 npm 安装 npm install vue cropper yarn 安装 yarn add vue cropper 项目中引用引入 这里我的项目是 vue2 组件中