cropperjs处理图片预览裁切功能

图片预览裁切有两种方法,结合服务器的图片上传预览或者纯客户端实现上传图片预览。
纯客户端实现上传图片预览 :
定义一个input标签 type设置为file 设置自带的属性hidden
<input type="file" hidden ref="file" @change="onFileChange" />
对选择器表单进行隐藏,点击头像触发input表单的点击事件@click="$refs.file.click()"
在change事件中获取文文件对象
const file = fileInput.files[0]
设置图片的 src
this.img = window.URL.createObjectURL(file)
file-input 如果选择了同一个文件不会触发change事件
解决方法就是每次使用完毕 把他的value清空
this.$refs.file.value = ''

引用第三方库cropperjs处理图片裁切

npm install cropperjs
import 'cropperjs/dist/cropper.css'
import Cropper from 'cropperjs'

因为要操作DOM,所以要在组件初始化之后再调用

mounted() {
		const image = this.$refs.img
		this.cropper = new Cropper(image, {
			viewMode: 1,
			dragMode: 'move',
			aspectRatio: 1,
			autoCropArea: 1,
			cropBoxMovable: false,
			cropBoxResizable: false,
			background: false
		})
	}

项目要求默认配置

			viewMode: 1,
			dragMode: 'move',
			aspectRatio: 1,
			autoCropArea: 1,
			cropBoxMovable: false,
			cropBoxResizable: false,
			background: false

如果是基于服务端的裁切,则使用:getData 方法,该方法得到裁切的区域参数然后传给服务端。

this.cropper .getData()

如果是纯客户端的图片裁切,则使用:getCroppedCanvas 方法,该方法得到裁切之后的图片对象(类似于URL.createObjectURL 方法得到的文件对象)。

// 获取裁切的文件对象
cropper.getCroppedCanvas().toBlob((blob) => {
 console.log(blob)
 }

发送请求

try {
		// 如果接口要求 Content-type是 multipart/form-data
		// 则你必须传递fromdata对象
		const formData = new FormData()
		formData.append('photo', blob)
		const { data } = await changeUserPhoto(formData)
		console.log(data)
		// 关闭弹出层
		this.$emit('close')
		// 更新视图
		this.$emit('update-photo', data.data.photo)
		this.$toast.success('上传成功!')
	} catch (err) {
		this.$toast.fail('上传失败!')
		console.log(err)
	}

图片预览裁切有两种方法,结合服务器的图片上传预览或者纯客户端实现上传图片预览。
纯客户端实现上传图片预览 :
定义一个input标签 type设置为file 设置自带的属性hidden

<input type="file" hidden ref="file" @change="onFileChange" />

对选择器表单进行隐藏,点击头像触发input表单的点击事件@click="$refs.file.click()"
在change事件中获取文文件对象
const file = fileInput.files[0]
设置图片的 src
this.img = window.URL.createObjectURL(file)
file-input 如果选择了同一个文件不会触发change事件
解决方法就是每次使用完毕 把他的value清空
this.$refs.file.value = ''

引用第三方库cropperjs处理图片裁切

npm install cropperjs
import 'cropperjs/dist/cropper.css'
import Cropper from 'cropperjs'

因为要操作DOM,所以要在组件初始化之后再调用

mounted() {
		const image = this.$refs.img
		this.cropper = new Cropper(image, {
			viewMode: 1,
			dragMode: 'move',
			aspectRatio: 1,
			autoCropArea: 1,
			cropBoxMovable: false,
			cropBoxResizable: false,
			background: false
		})
	}

项目要求默认配置

		viewMode: 1,
		dragMode: 'move',
		aspectRatio: 1,
		autoCropArea: 1,
		cropBoxMovable: false,
		cropBoxResizable: false,
		background: false

如果是基于服务端的裁切,则使用:getData 方法,该方法得到裁切的区域参数然后传给服务端。

this.cropper .getData()
如果是纯客户端的图片裁切,则使用:getCroppedCanvas 方法,该方法得到裁切之后的图片对象(类似于URL.createObjectURL 方法得到的文件对象)。

// 获取裁切的文件对象

cropper.getCroppedCanvas().toBlob((blob) => {
 console.log(blob)
 }

发送请求

try {
		// 如果接口要求 Content-type是 multipart/form-data
		// 则你必须传递fromdata对象
		const formData = new FormData()
		formData.append('photo', blob)
		const { data } = await changeUserPhoto(formData)
		console.log(data)
		// 关闭弹出层
		this.$emit('close')
		// 更新视图
		this.$emit('update-photo', data.data.photo)
		this.$toast.success('上传成功!')
	} catch (err) {
		this.$toast.fail('上传失败!')
		console.log(err)
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值