uniapp uview裁剪组件源码修改(u-avatar-cropper),裁出可自定义固定大小图片
2023-12-29 16:04:10
u-avatar-cropper修改后
<template>
<view class="index">
<!-- {{userinfo}} -->
<view class="top">
<view class="bg">
<image src="../../static/electronic_card/bg.png"></image>
</view>
</view>
<view class="main">
<view class="card" ref="card">
<image src="../../static/card/bg.png" mode=""></image>
<view class="content">
<view class="">
<view class="logo">
<image src="../../static/card/logo.png" mode=""></image>
</view>
<view class="txt">
姓 名:{{userinfo.name}}
<br>
班 级:{{userinfo.class}}
<br>
联系方式:{{userinfo.phone}}
<br>
入学年份:{{userinfo.entrance_year}}
<br>
No:{{userinfo.code}}
</view>
</view>
<view class="img">
<view class="" v-if="userinfo.photo" class="photo" @click="chooseAvatar">
<image :src="userinfo.photo" mode="widthFix" style="width: 100%;"></image>
</view>
<view class="applyschool-onlod-phops" @click="chooseAvatar" v-else>
<view class="phops-img">
<image src="../../static/applyschool/add_photo.png"></image>
</view>
<!-- <text>用于生成入校电子卡</text> -->
</view>
</view>
</view>
</view>
</view>
<view class="downbtn" @click="exportCardAsImage">查看与保存卡片</view>
<u-modal v-model="show" @confirm="confirmChange" confirm-color="#781C27" :content="content"></u-modal>
</view>
</template>
<script>
import html2canvas from "html2canvas"
import utlis from '../../common/utils.js'
export default {
mixins: [utlis],
data() {
return {
userinfo: {},
show: false,
content: '未认证',
url: ""
}
},
onLoad() {
this.getUserInfo()
uni.$on('uAvatarCropper', path => {
this.avatar = path;
// 可以在此上传到服务端
uni.uploadFile({
url: this.$configs.$UP_URL,
filePath: path,
name: 'file',
complete: (res) => {
console.log("上传照片成功", JSON.parse(res.data).data.url);
this.url = JSON.parse(res.data).data.url
this.$http.post(this.$configs.api.updatePhoto, {
'photo': this.url
})
.then(res => {
this.getUserInfo()
})
}
});
})
},
onUnload() {
uni.$off('uAvatarCropper')
},
methods: {
exportCardAsImage() {
const cardElement = this.$refs.card.$el;
console.log(this.$refs.card);
html2canvas(cardElement).then((canvas) => {
const imageData = canvas.toDataURL('image/png');
console.log("图片", imageData);
this.pic(imageData)
});
},
pic(src) {
uni.previewImage({
urls: Array.isArray(src) ? src : [src],
current: '',
success: function(res) {},
fail: function(res) {},
complete: function(res) {},
});
},
chooseAvatar() {
//裁剪组件
this.$u.route({
url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
params: {
destWidth: 182,
destHeight: 230,
rectWidth: 182,
rectHeight: 230,
fileType: 'jpg',
}
})
},
//获取校友卡信息
async getUserInfo() {
let res = await this.$http.post(this.$configs.api.aluminget, {
'uid': this.uid
})
this.userinfo = res.data.data.info
if (res.data.code !== 200) {
uni.showModal({
title: '提示',
confirmColor: '#781C27',
showCancel: false,
content: res.data.message,
success: function(res) {
if (res.confirm) {
uni.navigateTo({
url: '../index/index'
})
}
}
});
}
if (!res.data.data.info.status) {
res.data.data.info.status = 0
}
let contnerArr = [
'您还未认证成为校友',
'审核通过',
'待审核',
'审核不通过'
];
if (res.data.data.info.status != 1) {
this.show = true;
this.content = contnerArr[res.data.data.info.status]
}
},
confirmChange() {
uni.navigateBack()
}
}
}
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.index {
width: 100vw;
display: flex;
flex-direction: column;
// justify-content: center;
align-items: center;
}
.top {
width: 100vw;
.bg {
position: relative;
z-index: 1;
image {
height: 554rpx;
width: 100vw;
}
}
}
.applyschool-onlod-phops {
width: auto;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: space-between;
float: left;
margin-top: -30rpx;
}
.main {
position: relative;
z-index: 2;
margin-top: -100rpx;
width: 716rpx;
height: 402rpx;
background: rgba(175, 0, 5, 0.78);
border-radius: 16rpx 16rpx 16rpx 16rpx;
opacity: 1;
overflow: hidden;
// background: url("../../static/card/bg.png") repeat fixed center;
.card {
position: relative;
z-index: 1;
padding: 30rpx;
&>image {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 716rpx;
height: 402rpx;
}
.content {
position: relative;
z-index: 2;
display: flex;
justify-content: space-between;
.logo {
image {
width: 296rpx;
height: 72rpx;
}
}
.txt {
line-height: 50rpx;
font-size: 24rpx;
color: #FFFFFF;
font-weight: 400;
}
.img {
display: flex;
// justify-content: center;
align-items: center;
margin-right: 88rpx;
image {
width: 182rpx;
height: 230rpx;
}
}
}
}
}
.downbtn {
margin: 0;
width: 690rpx;
height: 104rpx;
background: #AF0005;
border-radius: 72rpx 72rpx 72rpx 72rpx;
opacity: 1;
color: #FFFFFF;
font-weight: 500;
line-height: 104rpx;
text-align: center;
margin-top: 76rpx;
}
.photo {
width: 182rpx;
height: 230rpx;
background-color: #fff;
display: flex;
align-items: center;
}
</style>
使用
<view class="" class="photo" @click="chooseAvatar">
<image :src="userinfo.photo" mode="widthFix" style="width: 100%;"></image>
</view>
onLoad() {
uni.$on('uAvatarCropper', path => {
this.avatar = path;
// 可以在此上传到服务端
uni.uploadFile({
url: this.$configs.$UP_URL,
filePath: path,
name: 'file',
complete: (res) => {
console.log("上传照片成功", JSON.parse(res.data).data.url);
}
});
})
},
chooseAvatar() {
//裁剪组件
this.$u.route({
url: '/uview-ui/components/u-avatar-cropper/u-avatar-cropper',
params: {
destWidth: 182,
destHeight: 230,
rectWidth: 182,
rectHeight: 230,
fileType: 'jpg',
}
})
},
文章来源:https://blog.csdn.net/m0_49083276/article/details/135287409
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!