vue-cropper的使用和图片跨域问题
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue

·
vue-cropper
vue-cropper的使用
- 安装
npm install vue-cropper
- 简单的示例:
// 组件内使用
<template>
<vueCropper
ref="cropper"
:img="option.img"
:outputSize="option.size"
:outputType="option.outputType"
:autoCrop="option.autoCrop"
></vueCropper>
</template>
<script >
</script>
import { VueCropper } from 'vue-cropper'
export default{
data:{
return{
option:{
img:"",//图片链接,绝对路径
size:1,//裁剪生成图片的质量
outputType:"png",//裁剪生成图片的格式
autoCrop:true,//是否默认生成截图框
},
}
},
components: {
VueCropper,
},
}
图片跨域问题
因为我的图片是本地上传到服务器,服务器返回图片的链接,在显示要截取的图片时遇到了跨域问题,解决办法是将图片转换为base64格式。
(注)获取本地上传的文件将其转化为base64格式,再获取截取后的图片,其格式也为base64,将其转化为File格式,发送给服务器即可。
- 图片转base64
//file为图片文件
function filetoBase64(file){
let reader = new FileReader();
let base64 = "";
reader.readAsDataURL(file);
reader.onload=()=>{
base64 = reader.result;
}
return base64;
}
- base64转图片
function dataURLtoFile(dataurl, filename = 'file') {
let arr = dataurl.split(',')
let mime = arr[0].match(/:(.*?);/)[1]
let suffix = mime.split('/')[1]
let bstr = atob(arr[1])
let n = bstr.length
let u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], `${filename}.${suffix}`, {
type: mime
})
}
- file格式转成文件流,以图片转换为例:
function fileToFormData(file){
const fd = new FormData();
fd.append("字段名",file,"file的文件名");
//还可以附带其他参数:
fd.append("字段名2",[参数2]);
//...
return fd;
}
- 使用elemen-ui的上传组件与vue-cropper插件结合,实现如下:
<template>
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-change="imgChange"
:auto-upload="false">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
<vueCropper
ref="cropper"
:img="option.img"
:outputSize="option.size"
:outputType="option.outputType"
:autoCrop="option.autoCrop"
></vueCropper>
<el-button size="small" type="primary" @click="startCrop">确定</el-button>
</template>
<script >
</script>
import { VueCropper } from 'vue-cropper'
export default{
data:{
return{
option:{
img:"",//图片链接,绝对路径
size:1,//裁剪生成图片的质量
outputType:"png",//裁剪生成图片的格式
autoCrop:true,//是否默认生成截图框
},
}
},
components: {
VueCropper,
},
methed:{
filetoBase64(file){
let reader = new FileReader();
let base64 = "";
reader.readAsDataURL(file);
reader.onload=()=>{
base64 = reader.result;
}
return base64;
},
imgChange(file){
const {raw} = file;
this.option.img = this.filetoBase64(raw);
},
startCrop(){
//获取截图的 base64 数据
this.$refs.cropper.getCropData(data=>{
console.log("这就是截图后图片的base64数据:",data);
});
},
},
}




vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:1 个月前 )
9e887079
[skip ci] 1 年前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐
所有评论(0)