赞
踩
写在前面, 该文章目前仅支持合成特定数量的分享图, 不支持随意数量分享图合成
app内实现一个邀请拉新功能, 需要根据每个用户生成各自的二维码, 并且把二维码合成到海报, 生成3张海报, 用户三选一进行分享. 今天我们只说其中一个功能实现 ---- 合成多张二维码分享图
单张可以参考这位博主内容 : https://dandelioncloud.cn/article/details/1419298504186597377/
在上面单张的基础上, 我做了改动, 实现特定数量分享图的生成
前提 : 安装插件 – https://ext.dcloud.net.cn/plugin?id=2434
<button type="default" @click="beginCanvasBatch">开始批量合成</button>
<button style="margin-top: 50rpx;" @click="save(0)">保存图片1</button>
<button style="margin-top: 50rpx;" @click="save(1)">保存图片2</button>
<button style="margin-top: 50rpx;" @click="save(2)">保存图片3</button>
// 生成后的图片列表
<view v-for="(itemImg, index) in finallyImgList" :key="index + 'img'"><image :src="itemImg" mode="widthFix"></image></view>
// 具体作用不清楚, 组件实际不在界面展示出来, 估计只是为了生成图片的一个占位
// 这里用不了v-for循环,所以只能固定合成的数量, 也可能是我方式错误, 如果可以告知, 这样写着实不太优雅
<mosowe-canvas-image ref="mosoweCanvasComponents0" @canvasImage="_canvasImage0" :lists="imageList[0]" height="426" width="296" />
<mosowe-canvas-image ref="mosoweCanvasComponents1" @canvasImage="_canvasImage1" :lists="imageList[1]" height="426" width="296" />
<mosowe-canvas-image ref="mosoweCanvasComponents2" @canvasImage="_canvasImage2" :lists="imageList[2]" height="426" width="296" />
<script>
import mosoweCanvasImage from '@/components/mosowe-canvas-image/mosowe-canvas-image';
export default {
comments: {
mosoweCanvasImage
},
data() {
return {
finallyImgList: [], // 合成后的图片list
imageList: [], // 整合的未合成的图片list
logoImage: {
type: 'image',
content: 'http://xxx.jpg',
width: 15,
height: 15,
x: 42,
y: 352,
arc: false,
arcX: 0,
arcY: 0,
arcR: 0
}, // logo
};
},
computed: {
qrImage() {
var userInfo = getApp().globalData.global_user;
var id = userInfo.id
return {
type: 'qr',
content: `https://xxx?id=${id}`,
text: '这是一个二维码',
width: 60,
height: 60,
x: 20,
y: 330,
arc: false,
arcX: 0,
arcY: 0,
arcR: 0
}; // 二维码
}
},
methods: {
// 开始生成
beginCanvasBatch() {
let this_ = this;
var area;
this.imageList.map((item, i) => {
setTimeout(function() {
area = 'mosoweCanvasComponents' + i;
this_.$refs[area].createCanvas();
}, 2000 * i);
});
},
_canvasImage0(e) {
this.finallyImgList = [];
console.log('图片0', e);
this.finallyImgList.push(e);
},
_canvasImage1(e) {
console.log('图片1', e);
this.finallyImgList.push(e);
},
_canvasImage2(e) {
console.log('图片2', e);
this.finallyImgList.push(e);
},
formatImageList() {
this.imageList = [
[
{
type: 'image',
content: 'https://xxx.jpg',
width: 296,
height: 426,
x: 0,
y: 0
},
this.qrImage,
this.logoImage
],
[
{
type: 'image',
content:'http://xxx.jpg',
width: 296,
height: 426,
x: 0,
y: 0
},
this.qrImage,
this.logoImage
],
[
{
type: 'image',
content:'http://xxx.jpg',
width: 296,
height: 426,
x: 0,
y: 0
},
this.qrImage,
this.logoImage
]
];
},
save(i) {
let url = this.finallyImgList[i];
uni.saveImageToPhotosAlbum({
filePath: url,
success: () => {
uni.hideLoading();
uni.showToast({
title: '图片已保存'
});
},
fail: () => {
uni.hideLoading();
uni.showToast({
title: '图片保存失败'
});
}
});
},
},
onLoad() {
this.formatImageList();
}
};
</script>
底图+二维码+logo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。