Vue中如何进行表单图片裁剪与预览

Vue中如何进行表单图片裁剪与预览

在前端开发中,表单提交是一个常见的操作。有时候,我们需要上传图片,但是上传的图片可能会非常大,这会增加服务器的负担,同时也会降低用户的体验。因此,我们通常需要对上传的图片进行裁剪和预览。在Vue中,我们可以使用一些第三方库来实现这个功能。

在这里插入图片描述

使用第三方库进行图片裁剪

在Vue中,我们可以使用第三方库vue-cropper来进行图片的裁剪。首先,我们需要安装vue-cropper:

npm install vue-cropper --save

然后,在Vue组件中引入vue-cropper:

import VueCropper from 'vue-cropper'

接下来,我们可以在Vue组件中使用vue-cropper的<vue-cropper>标签来实现图片的裁剪:

<template>
  <div>
    <input type="file" @change="handleFileChange">
    <vue-cropper ref="cropper" :img="img" :outputType="'png'"></vue-cropper>
    <button @click="getCroppedImage">获取裁剪后的图片</button>
  </div>
</template>

<script>
import VueCropper from 'vue-cropper'

export default {
  components: {
    VueCropper
  },
  data () {
    return {
      img: ''
    }
  },
  methods: {
    handleFileChange (event) {
      const file = event.target.files[0]
      const reader = new FileReader()
      reader.onload = (e) => {
        this.img = e.target.result
      }
      reader.readAsDataURL(file)
    },
    getCroppedImage () {
      this.$refs.cropper.getCroppedCanvas().toBlob((blob) => {
        console.log(blob)
      })
    }
  }
}
</script>

在上面的代码中,我们首先定义了一个标签,当用户选择图片后,我们将图片转换为base64格式并保存在img变量中。然后,我们使用标签来显示图片,并允许用户进行裁剪。最后,当用户点击“获取裁剪后的图片”按钮时,我们可以使用this.$refs.cropper.getCroppedCanvas().toBlob()方法获取裁剪后的图片。

使用第三方库进行图片预览

在Vue中,我们可以使用第三方库vue-image-crop-upload来进行图片的预览。首先,我们需要安装vue-image-crop-upload:

npm install vue-image-crop-upload --save

然后,在Vue组件中引入vue-image-crop-upload:

import VueImageCropUpload from 'vue-image-crop-upload'

接下来,我们可以在Vue组件中使用vue-image-crop-upload的<vue-image-crop-upload>标签来实现图片的预览:

<template>
  <div>
    <vue-image-crop-upload
      ref="cropUpload"
      :preview-src="previewSrc"
      :img-format="imgFormat"
      :img-quality="imgQuality"
      :crop-box-ratio="cropBoxRatio"
      :crop-box-min-width="cropBoxMinWidth"
      :crop-box-min-height="cropBoxMinHeight"
      :crop-box-max-width="cropBoxMaxWidth"
      :crop-box-max-height="cropBoxMaxHeight"
      @crop-success="cropSuccess"
    >
      <button>选择图片</button>
    </vue-image-crop-upload>
  </div>
</template>

<script>
import VueImageCropUpload from 'vue-image-crop-upload'

export default {
  components: {
    VueImageCropUpload
  },
  data () {
    return {
      previewSrc: '',
      imgFormat: 'jpeg',
      imgQuality: 0.8,
      cropBoxRatio: 1,
      cropBoxMinWidth: 100,
      cropBoxMinHeight: 100,
      cropBoxMaxWidth: 800,
      cropBoxMaxHeight: 800
    }
  },
  methods: {
    cropSuccess (dataUrl) {
      console.log(dataUrl)
    }
  }
}
</script>

在上面的代码中,我们使用标签来显示图片,并允许用户进行裁剪和预览。首先,我们定义了一些参数,包括预览图片的src、图片格式、图片质量、裁剪框的比例和大小等。然后,我们定义了一个@crop-success事件,当用户完成图片裁剪后,会触发这个事件,并返回裁剪后的图片的base64格式数据。最后,我们可以将这个数据提交到服务器或者进行其他操作。

将图片裁剪和预览结合起来

在实际开发中,我们通常需要将图片裁剪和预览结合起来,以便用户可以在预览图片的同时进行裁剪。下面是一个示例代码:

<template>
  <div>
    <vue-image-crop-upload
      ref="cropUpload"
      :preview-src="previewSrc"
      :img-format="imgFormat"
      :img-quality="imgQuality"
      :crop-box-ratio="cropBoxRatio"
      :crop-box-min-width="cropBoxMinWidth"
      :crop-box-min-height="cropBoxMinHeight"
      :crop-box-max-width="cropBoxMaxWidth"
      :crop-box-max-height="cropBoxMaxHeight"
      @crop-success="cropSuccess"
    >
      <button>选择图片</button>
    </vue-image-crop-upload>
    <vue-cropper
      ref="cropper"
      :img="cropperImg"
      :output-type="'png'"
      v-if="showCropper"
    ></vue-cropper>
    <button @click="showCropper = !showCropper">切换裁剪</button>
    <button @click="getCroppedImage">获取裁剪后的图片</button>
  </div>
</template>

<script>
import VueImageCropUpload from 'vue-image-crop-upload'
import VueCropper from 'vue-cropper'

export default {
  components: {
    VueImageCropUpload,
    VueCropper
  },
  data () {
    return {
      previewSrc: '',
      imgFormat: 'jpeg',
      imgQuality: 0.8,
      cropBoxRatio: 1,
      cropBoxMinWidth: 100,
      cropBoxMinHeight: 100,
      cropBoxMaxWidth: 800,
      cropBoxMaxHeight: 800,
      cropperImg: '',
      showCropper: false
    }
  },
  methods: {
    cropSuccess (dataUrl) {
      this.previewSrc = dataUrl
      this.cropperImg = dataUrl
    },
    getCroppedImage () {
      if (this.showCropper) {
        this.$refs.cropper.getCroppedCanvas().toBlob((blob) => {
          console.log(blob)
        })
      } else {
        this.$refs.cropUpload.getCroppedImage().toBlob((blob) => {
          console.log(blob)
        })
      }
    }
  }
}
</script>

在上面的代码中,我们首先定义了一个标签用于图片的预览和裁剪,同时也定义了一个标签用于图片的裁剪。然后,我们定义了一个showCropper变量来控制当前显示的是哪个标签。当用户点击“切换裁剪”按钮时,我们可以切换当前显示的标签。最后,当用户点击“获取裁剪后的图片”按钮时,我们可以根据当前显示的标签来获取裁剪后的图片。

结语

在Vue中进行表单图片的裁剪和预览是一个常见的需求。通过使用第三方库vue-cropper和vue-image-crop-upload,我们可以很容易地实现这个功能。同时,我们还可以将图片裁剪和预览结合起来,以提高用户的体验。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择合适的采购系统,实现企业数字化转型

随着数字化技术的飞速发展&#xff0c;企业数字化转型已经成为了当今市场的必然趋势。而采购系统作为企业数字化转型的重要组成部分&#xff0c;选择合适的采购系统对于企业来说至关重要。本文将围绕选择合适的采购系统&#xff0c;实现企业数字化转型展开讨论。 一、企业数字化…

OpenCV项目开发实战-- 的单应性(Homography)实例Python/C++代码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 什么是单应性(Homography)? 考虑图 1 中所示的平面(书的顶部)的两个图像。红点表示两个图像中的相同物理点。在计算机视觉术语中,我们称这些为对应点。图 1. 显示了四种不同颜色的四个对应点——红色、绿色、黄色和…

YUM源安装,在线YUM,本地YUM

YUM源 一、定义 YUM&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;**可以自动处理依赖性关系&…

【八大排序(五)】快排进阶篇-挖坑法+前后指针法

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 快排进阶篇 1. 前情回顾2. 思路回顾3. 单…

java方法

文章目录 一、java方法总结 一、java方法 在前面几个章节中我们经常使用到 System.out.println()&#xff0c;那么它是什么呢&#xff1f; println() 是一个方法。 System 是系统类。 out 是标准输出对象。这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 pr…

docker部署prometheus+grafana视图监控

效果 一、grafana可视化平台部署 docker run -d \--namegrafana \--restartalways \-p 3000:3000 \grafana/grafanagrafana我也是部署在170.110服务器上&#xff0c;192.168.170.110:3000访问grafana 默认账号密码都是admin 二、部署exportor采集信息 针对各类数据库平台系统…

ch8_1_CPU的结构和功能

1. cpu的结构 1.1CPU 的功能 控制器的功能 控制器的功能具体作用取指令指令控制分析指令操作控制执行指令&#xff0c; 发出各种操作命令控制程序输入与结果的输出时间控制总线管理处理中断处理异常情况和特殊请求数据加工 运算器的功能 实现算术运算 和 逻辑运算&#x…

我的256创作纪念日

机缘 挺开心的&#xff0c;想到自己未曾写过一些非技术类的博客&#xff0c;恰巧今天刚好也是我的256创作纪念日&#xff0c;就乘着这个日子&#xff0c;写一点自己过去的收获、内心的想法和对未来的展望吧。 本人不才&#xff0c;只就读于一所民办本科之中&#xff0c;我挺不想…

【linux】探索Linux命令行中强大的网络工具:netstat

文章目录 前言一、netstat是什么&#xff1f;二、使用方法1.常用参数2.实例演示3.更多功能 总结 前言 在Linux命令行中&#xff0c;有许多实用的工具可帮助我们管理和监控网络连接。其中一个最重要的工具就是netstat&#xff0c;它提供了丰富的网络连接和统计信息&#xff0c;…

在windos中同时使用gitee与github

1.为什么这样做&#xff1f; 原因非常简单&#xff0c;我们遇到自己喜欢的git仓库后&#xff0c;通常会将他们克隆到我们本地电脑上&#xff0c;但这个时候会有一个问题&#xff0c;就是我们喜欢的仓库有可能是gitee仓库&#xff0c;也有可能是github仓库&#xff0c;这个时候…

web性能检测工具lighthouse

About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页面的性能。 你可以以多种方式使用它。 浏览器插件 作为浏览器插件&#xff0c;访问chrome网上商店 搜索Lighthouse 插件安装。以两种方式使用。 方式一 安装…

命名管道:FIFO

至此&#xff0c;我们还只能在相关的程序之间传递数据&#xff0c;即这些程序是由一个共同的祖先进程启动的。但如果我们想在不相关的进程之间交换数据&#xff0c;这还不是很方便。 我们可以用FIFO文件来完成这项工作&#xff0c;它通常也被称为命名管道&#xff08;named pip…

分布式重试服务平台 Easy-Retry

文章目录 [toc] 1.简介1.1[爱组搭官网](http://aizuda.com/)1.2介绍1.3 相关地址 2.架构2.1系统架构图2.2 客户端与服务端数据交互图 3.业内成熟重试组件对比4.快速开始4.1 服务端项目部署4.1.0 初始化脚本4.1.1 源码部署4.1.2 Docker部署 4.2 客户端集成配置4.2.1 添加依赖4.2…

青岛科技大学|物联网工程|物联网定位技术(第三讲)|15:40

目录 物联网定位技术&#xff08;第三讲&#xff09; 1. 试简述C/A码的作用、构成 请画出C/A码生成电路简图并给予原理性的说明 2. 试简述 P码的作用、构成 请画出P码生成电路简图&#xff0c;并给予原理性的说明 3. GPS信号是如何进行伪码扩频与解扩 请画图给予说明 4…

被抄袭声明

我&#xff08;受害者&#xff09;的博客主页&#xff1a; ChuckieZhu的博客_CSDN博客-MATLAB,Python,Django领域博主 抄袭者&#xff08;施害者&#xff09;博客主页&#xff1a; 洋洋菜鸟的博客_CSDN博客-python实例,数学建模,python基础领域博主 问题说明&#xff1a; …

vue结合elementui表格el-table实现弹窗checkbox自定义列显示隐藏,刷新保持上次勾选不丢失,附完整代码

el-table实现自定义列显示隐藏 有时候表格太多列&#xff0c;要是默认全都显示就会很拥挤&#xff0c;又不能固定只显示某些列&#xff0c;这时候我们可以让用户自定义要显示隐藏哪些列。 网上很多教程都是用的v-if&#xff0c;但是v-if非常麻烦&#xff0c;每一列都要写判断条…

Volo.Abp升级小记(二)创建全新微服务模块

文章目录 创建模块领域层应用层数据库和仓储控制器配置微服务 测试微服务微服务注册添加资源配置配置网关 运行项目 假设有一个按照 官方sample搭建的微服务项目&#xff0c;并安装好了abp-cli。 需要创建一个名为GDMK.CAH.Common的模块&#xff0c;并在模块中创建标签管理功能…

Centos环境 使用docker 部署MySQL 8.X详细版本

文章目录 安装docker配置docker 阿里镜像加速阿里云容器镜像服务ACR配置镜像源 安装部署MySQL拉取MySQL镜像创建挂载文件测试部署部署MySQL进入容器将它的mysql配置同步给宿主机删除test1测试容器 正式部署MySQL查看正式部署的容器状态配置远程连接字符集以及关闭跳过密码验证等…

基于STM32C8T6的智能小车项目时钟配置

一、时钟树简介 HSE 是高速的外部时钟信号&#xff0c;可以由有源晶振或者无源晶振提供&#xff0c;频率从 3-25MHZ 不等。当使用有源晶振时&#xff0c;时钟从 OSC_IN 引脚进入&#xff0c;OSC_OUT 引脚悬空&#xff0c;当选用无源 晶振时&#xff0c;时钟从 OSC_IN 和 OSC_OU…

【工作中遇到的性能优化问题】

项目场景&#xff1a; 页面左侧有一列表数据&#xff0c;点击列表项会查对应的表格数据和表单信息&#xff08;表单是根据数据配置生成的&#xff09;&#xff0c;并在右侧展示。如果数据量大&#xff0c;则非常卡。 需要对此页面进行优化。 问题描述 问题一、加载左侧数据时…