热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用vuecropper实现图片裁剪,放大缩小,实时预览等

效果图

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

1、安装

npm install vue-cropper -S

2、main.js引用

import VueCropper from 'vue-cropper'
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
Vue.config.productionTip = false
Vue.use(Antd)
Vue.use(VueCropper)

3、主要文件(封装成组件)

<template>
<div id="cropper">
<VueCropper ref="cropper"
:img='url'
:info=option.info
:outputSize=option.outputSize
:outputType=option.outputType
:canMove=option.canMove
:autoCrop=option.autoCrop
:autoCropWidth=option.autoCropWidth
:autoCropHeight=option.autoCropHeight
:fixedBox=option.fixedBox
:original=option.original
:infoTrue=option.infoTrue
:centerBox=option.centerBox
:canMoveBox=option.canMoveBox
:canScale=option.canScale
:fixed=option.fixed
:fixedNumber=option.fixedNumber
@realTime="realTime">
</VueCropper>
<a-button type="primary"
@click="chooseImg">选择图片</a-button>
<input type="file"
@change="getFile"
accept="image/*"
ref="imginput"
id="img-input">
<a-button type="primary"
@click="startCrop">保存截图</a-button>
<a-button type="primary"
@click="scaleBigger">放大</a-button>
<a-button type="primary"
@click="scaleSmaller">缩小</a-button>
<a-button type="primary"
@click="rotateLeft">左旋转</a-button>
<a-button type="primary"
@click="rotateRight">右旋转</a-button>
<a-button type="primary"
@click="reload">重置大小</a-button>
<a-button type="primary"
@click="rotateClear">重置旋转</a-button>
<a-button type="primary"
@click="refresh">重置所有</a-button>
<a-progress :percentage="percentage"
v-show="isShow"></a-progress>
<!-- 预览图片 -->
<div v-html="previewHTML"></div>
</div>
</template>
<script>
import { VueCropper } from 'vue-cropper'
import { pathToBase64, base64ToPath } from 'image-tools'
export default {
data() {
return {
option: {
outputSize: 1, // 裁剪生成图片的质量 0.1 - 1
outputType: 'png', // 裁剪生成图片的格式 jpeg || png || webp
canScale: true, // 图片是否允许滚轮缩放 默认true
autoCrop: true, // 是否默认生成截图框 默认false
canMove: true, //上传图片是否可以移动 默认true
autoCropWidth: 200, //默认生成截图框宽度 容器的80% 0~max
autoCropHeight: 200, //默认生成截图框高度 容器的80% 0~max
// fixedBox: true, // 固定截图框大小 不允许改变 false true | false
fixed: true, //是否开启截图框宽高固定比例
original: false, // 上传图片按照原始比例渲染 false true | false
infoTrue: false, // 为展示真实输出图片宽高 false 展示看到的截图框宽高 false true | false
centerBox: true, // 截图框是否被限制在图片里面 false true | false
canMoveBox: true, //截图框能否拖动 true true | false
fixedNumber: [1, 1] // 截图框的宽高比例 [宽度, 高度]
},
url: '',
previewHTML: '',
cropperSrc: '',
param: {
// 上传参数
originalFilename: '',
contentType: 'image/jpeg',
cropImgPath: '', // 接口要求传入截图的图片路径格式为blob:http://192.168.0.109:8080/95dbc0cd-5624-4e11-8a45-b7a1a855020d
},
flag: true,
percentage: 0,// 上传进度
isShow: false
}
},
components: {
VueCropper
},
methods: {
// 点击选择图片
chooseImg() {
this.$refs.imginput.click()
},
//保存截图
startCrop() {
if (!this.flag) return false
this.flag = false
// 获取截图的base64 数据
this.$refs.cropper.getCropData(data => {
this.cropperSrc = data;
// base64数据转成图片(用了插件)
base64ToPath(data)
.then(path => {
this.param.cropImgPath = path;
console.log(path);
// 上传到服务器
this.upload(this.param);
})
.catch(error => {
console.error(error)
})
})
},
// 图片放大
scaleBigger() {
this.$refs.cropper.changeScale(1)
},
// 图片缩小
scaleSmaller() {
this.$refs.cropper.changeScale(-1)
},
// 图片左旋转90°
rotateLeft() {
this.$refs.cropper.rotateLeft()
},
// 图片右旋转90°
rotateRight() {
this.$refs.cropper.rotateRight()
},
// 重置大小
reload() {
this.$refs.cropper.reload()
},
// 重置旋转
rotateClear() {
this.$refs.cropper.rotateClear()
},
// 重置所有
refresh() {
// this.$refs.cropper.refresh() ;
this.$refs.cropper.reload()
this.$refs.cropper.rotateClear()
},
// 进度条展示
showProgress(res) {
this.$nextTick(() => {
this.percentage = Math.floor(res.loaded / res.total * 100)
})
},
// 图片上传
upload(param) {
this.isShow = true;
// 具体请求不显示
console.log('上传图片');
},
// input选择图片
getFile(e) {
var vm = this
console.log(e);
// let file = this.$refs.imginput.files[0]
const file = e.target.files[0]
if (!/image\/\w+/.test(file.type)) {
this.$message({
message: '请选择图片',
type: 'warning'
})
// 清空input值
this.$refs.imginput.value = ''
return false
}
this.param.originalFilename = file.name
// 创建文件读取对象
var reader = new FileReader()
reader.readAsDataURL(file)
// 文件读取结束
reader.onload = function (e) {
// 此处this === reader
vm.url = this.result;
vm.previewUrl = this.result;
}
},
// 图片预览
realTime(data) {
console.log(data);
this.previewHTML = data.html;
},
}
}
</script>
<style lang="scss" scoped>
#cropper {
margin: 0 auto;
height: 350px;
width: 850px;
.vue-cropper {
width: 300px;
height: 300px;
margin: 0 auto;
.cropper-crop-box {
transform: translate3d(0px, 0px, 0px);
}
}
}
#img-input {
display: none;
}
</style>

推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
author-avatar
朱甜520_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有