<template>
<view>
<view class="personal_li"
@click="shareClick">
<image src="../../static/address.png"
mode="widthFix"
class="iconImage"></image>
<text class="font14">分享生成图片</text>
<image src="../../static/jt.png"
mode="widthFix"
class="jtIcon"></image>
</view>
<view class="canvasContent" v-if="canvasShow">
<canvas canvas-id="shareCanvas" class="canvasName"></canvas>
<view class="canvasText">图片已保存到相册,可分享给好友</view>
<image src="../../static/error.png" class="errorImage" @click="canvasShow = false"></image>
</view>
</view>
</template> <script>
export default {
data() {
return {
canvasShow: false
}
},
methods: {
//这是一个封装好的方法
promisify: api => {
return (options, ...params) => {
return new Promise((resolve, reject) => {
const extras = {
success: resolve,
fail: reject
}
api({ ...options, ...extras }, ...params)
})
}
},
shareClick() {
const wxGetImageInfo = this.promisify(uni.getImageInfo)
Promise.all([
// 图片目前只随机找了几张图片,后期可自行替换
wxGetImageInfo({
src: 'http://pics.ksudi.com/pic/2019/soms/companycard/jd2.png' // 背景图片
}),
wxGetImageInfo({
src: 'http://pics.ksudi.com/pic/2019/soms/companycard/st2.png' // 二维码图片,二维码图片如需要携带参数,可根据接口将需要扫码进入页面的路径+参数传入后端,后端可根据生产小程序二维码路径,将路径放入这里就ok了,可参考
})
]).then(res => {
console.log(3454)
const ctx = wx.createCanvasContext('shareCanvas')
console.log(ctx)
// 底图
ctx.drawImage(res[0].path, 0, 0, 600, 700)
// 作者名称
ctx.setTextAlign('center') // 文字居中
ctx.setFillStyle('#000000') // 文字颜色:黑色
ctx.setFontSize(22) // 文字字号:22px
ctx.fillText('作者:张杰', 300 / 2, 100)
// 小程序码
const qrImgSize = 150
ctx.drawImage(res[1].path, (340 - qrImgSize) / 2, 230, qrImgSize, qrImgSize)
ctx.stroke()
// 绘图生成临时图片
console.log('res', res)
ctx.draw(false,() => {
this.tempFileImage()
})
this.canvasShow = true
})
},
tempFileImage() {
let that = this
uni.canvasToTempFilePath({
canvasId: 'shareCanvas',
success: (res) => {
uni.hideLoading()
that.savePic(res.tempFilePath)
},
fail:function () {
//TODO
}
})
},
//保存
savePic (filePath) {
console.log('filePath', filePath)
uni.showLoading({
title: '正在保存'
});
uni.saveImageToPhotosAlbum({
filePath: filePath,
success: function () {
uni.showToast({
title: '图片保存成功~'
});
},
fail: function (e) {
//TODO
},
complete: function (){
uni.hideLoading()
}
});
}
}
}
</script>
<style lang="scss" scoped>
.canvasContent{
position: fixed;
bottom: 0;
left: 0;
right: 0;
top: 0;
background: rgba(0,0,0,0.5);
display: flex;
align-items: center;
flex-direction: column;
padding-top: 50upx; .canvasName{
width: 80%;
height: calc(100vh - 300upx);
}
.canvasText{
margin: 30upx 0 20upx;
color: #FFFFFF;
}
.errorImage{
width: 80upx;
height: 80upx;
}
}
</style>

  

uni-app 实现分享生成图片的更多相关文章

  1. android 从其他app接收分享的内容

    Receiving Content from Other Apps[从其他app接收分享的内容] 就像你的程序能够发送数据到其他程序一样,其他程序也能够简单的接收发送过来的数据.需要考虑的是用户与你的 ...

  2. Android原生APP内分享

    Android原生APP内分享,可实现数据分享以及assets文件夹分享及私有文件分享 项目地址:https://github.com/json-pu/AndroidAppShare.git

  3. 如何给自己的app添加分享到有道云笔记这样的功能

    文章同步自http://javaexception.com/archives/34 如何给自己的app添加分享到有道云笔记这样的功能 问题: 在之前的一个开源笔记类项目Leanote中,有个用户反馈想 ...

  4. 浅谈APP的分享功能,有时候社交裂变形式比内容更“重要”

    回顾2018年的移动互联网,“社交裂变”“下沉”等成为年度关键词.一方面我们可以看到社交裂变助推用户增长,另一方面我们也看到了以拼多多.趣头条为代表的互联网企业对于社交裂变模式表现出的空前关注度.作为 ...

  5. Android经典项目开发之天气APP实例分享

    原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...

  6. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  7. Elong App 性能测试分享

    个人简介: 测试老鸟,曾做过6年的测试以及2年的大数据开发:曾就职于伟景行.高德(大数据开发):钟情于钻研开源测试框架:目前挂单于艺龙. 有对本主题感兴趣的同学,可以加我Q私信(305285925): ...

  8. 最近在研究电台类app,分享2个源码大家一起讨论

    好像去年有一阵,电台类的app特别火爆,喜马拉雅和蜻蜓FM互相还撕逼.听老罗,听好好说话,都得在电台app里,所以我想研究研究这些app.我没那么多资源,只好从app的开发架构方面去研究. 我看api ...

  9. 微信app的分享功能

    最近在做微信app,需要用到分享功能,横观文档,压根没有提过分享功能自定义的事情……后来在搜索中找到一些前辈的文章,使用WeixinJSBridge这个接口实现,但是,我非常非常好奇,这是什么渠道透露 ...

随机推荐

  1. (原创)理解主机设备(PLC,PC机)之间的以太网通信

    主机设备:PC机,PLC 网络设备:家用路由器 局域网包括了有线局域网和无线局域网(WIFI).怎么去使用2者? 网络设备的职责最终目的为了帮助2台主机的数据传输.路由器,交换机范围不同,目的相同.在 ...

  2. C# VB .net读取识别条形码线性条码codabar

    codabar是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取codabar条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速 ...

  3. Socker编程之UDP

    一:socket简介 1. 不同电脑上的进程之间如何通信 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起! 在1台电脑上可以通过进程号(PID)来唯一标识一个进程,但是在网络中这是行不通的. ...

  4. HTNL5-ARIA role属性

    WAI-ARIA Web Accessibility Initiative’s Accessible Rich Internet Applications 无障碍网页倡议–无障碍的富互联网应用,也简称 ...

  5. 前端获取文件input框的美化操作

    前面我们说了一种利用input框和js的当时获取本地文件内容的情况-详细信息参考 2017年11月8日前端用js获取本地文件的内容 以上方式获取的按钮是系统默认的显示,有时候我们需要对按钮的外观进行美 ...

  6. markdown 格式测试

    Q1: before 与 afer 的而区别在哪? Q2: 如何预防"爆仓"? Q3: 在购买量 much > 库存量 num时, 把much自动改为num? -- 在t2的 ...

  7. Mycat配置项详解

     schema.xml文件配置中的balance属性和writeType属性: . balance=", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上. . ba ...

  8. 用 ConfigMap 管理配置

    1. ConfigMap介绍管理配置 ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ...

  9. (三)MongoDB增、删、改、查

    (三)MongoDB增.删.改.查 mongodb 2018年03月07日 09时31分40秒 插入基础 查询 基础查询find().findOne() 指定返回的字段 关系查询 逻辑运算 复杂数据的 ...

  10. python的一些包安装

    Linux下pip 的安装方法: 使用get-pip.py安装 要安装pip,请安全下载get-pip.py.1: curl https://bootstrap.pypa.io/get-pip.py ...