小程序canvas画图保存至手机相册

(1)可直接展示生成的海报 。因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报

(2)tip: canvas 组件是由客户端创建的原生组件,它的层级是最高的,不能通过 z-index 控制层级。(在手机上canvas在最上层无法隐藏)解决方法:

  canvas外加一框view 设置样式:style="width:0;height:0;overflow: hidden;opacity:0;position:absolute;left:-375px;top:0; 隐藏在屏幕之外

<view class="container">
<view class="btn" bindtap="saveImage">保存图片</view>
<view class="canvasBox">
<!-- <view class="canvasBox" style="width:0;height:0;overflow: hidden;opacity:0;position:absolute;left:-375px;top:0;"> -->
<!--这里为了展示效果为设置到屏幕之外 -->
<canvas canvas-id='myCanvas' style='width:375px;height:500px;margin: 0;padding: 0;display:block;'></canvas>
</view>
</view>

(3)绘制圆形用户头像 

ctx.arc(46,358,25, 0, 2 * Math.PI)
ctx.fill()
ctx.save();
ctx.beginPath(); //开始绘制
ctx.clip(); //剪切
ctx.drawImage(res.path, 23, 333, 50, 50); //userHeader // 推进去图片必须是https
ctx.restore(); //恢复之前保存的绘图上下文 继续绘制
(4)小程序canvas真机绘图时无法使用网络图片,需下载至手机使用临时路径绘制,这里使用wx.getImageInfo获取网络图片临时路径
(5)这里图片均使用网络图片
//index.js
const app = getApp()
Page({
data: {
cardPath: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1534766809331&di=012cc4ad15d457ffa55c6537503eb84a&imgtype=0&src=http://picture.5068.com/allimg/121120/4-1211201G920.jpg',
headPath: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1534765039080&di=1e81a596bc89cd54db55c0dbc7c4bb87&imgtype=0&src=http://img3.100bt.com/upload/ttq/20140529/1401337844678_middle.png',
sendName: '文字描述描述文字'
},
onLoad: function (options) {
var that = this;
wx: wx.getSystemInfo({
success: function (res) {
that.setData({
pixelRatio: res.pixelRatio,
windowWidth: res.windowWidth,
windowHeight: res.windowHeight
})
}
})
that.drawCanvas();
},
//画图
drawCanvas: function () {
this.setData({
cardPath: this.data.cardPath,
headPath: this.data.headPath,
sendName: this.data.sendName
});
let ctx = wx.createCanvasContext('myCanvas');
let ctxW = this.data.windowWidth;
let ctxH = 1210;
// 默认像素比
let pixelRatio = this.data.pixelRatio;
// 垂直渐变
const grd = ctx.createLinearGradient(0, 0, 0, ctxH);
grd.addColorStop(0, '#ffffff');
grd.addColorStop(1, '#ffffff');
ctx.setFillStyle(grd);
ctx.fillRect(0, 0, ctxW, ctxH);
wx.getImageInfo({
src: this.data.cardPath,
success: (res) => {
ctx.drawImage(res.path, 15, 15, 345, 470); //card
wx.getImageInfo({
src: this.data.headPath,
success: (res) => {
/**/
ctx.arc(46,358,25, 0, 2 * Math.PI)
ctx.fill()
ctx.save();
ctx.beginPath(); //开始绘制
ctx.clip(); //剪切
ctx.drawImage(res.path, 23, 333, 50, 50); //userHeader  // 推进去图片必须是https
ctx.restore(); //恢复之前保存的绘图上下文 继续绘制
/**/
ctx.setTextAlign('left');
ctx.setTextBaseline('middle');
ctx.setFontSize(16);
ctx.setFillStyle('#fff');
this.fontLineFeed(ctx, this.data.sendName, 450, 30, 79, 328);
ctx.stroke();
ctx.draw();
}
})
}
})
},
// 保存图片
saveImage: function (e) {
wx.canvasToTempFilePath({
canvasId: 'myCanvas',
success: function (res) {
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success(result) {
wx.showToast({
title: '图片保存成功',
icon: 'success',
duration: 2000
})
}
})
}
})
},
// 文字换行
fontLineFeed: function (ctx, str, splitLen, strHeight, x, y) {
let strArr = [];
for (let i = 0, len = str.length / splitLen; i < len; i  ) {
strArr.push(str.substring(i * splitLen, i * splitLen   splitLen));
}
let s = 0;
for (let j = 0, len = strArr.length; j < len; j  ) {
s = s   strHeight;
ctx.fillText(strArr[j], x, y   s);
}
},
})

 (6)页面显示样式

(7)保存图片为

(8)tips:保存至手机时需配置网络图片域名至小程序开发者downloadFile 合法域名下。

   tips:微信用户头像域名也必须配置 (大坑.........)

 

 

更多专业前端知识,请上 【猿2048】www.mk2048.com

小程序canvas生成海报保存至手机相册相关推荐

  1. 微信小程序Canvas绘制主页保存到手机相册

    本篇文章适用于保存用户主页.海报等至手机相册,内容包含圆角头像.文字超出显示省略号.多行超出显示省略号!(整体代码放入最下方可直接复制查看) 话不多说上图 页面如下 保存相册之后如下 整体分三部分来讲 ...

  2. mpvue 微信小程序canvas生成海报

    mpvue 微信小程序canvas生成海报 效果 贴代码 html <template><!--index.wxml--><view class="poster ...

  3. 小程序canvas生成海报

    小程序canvas生成海报,画布转图片后可直接保存图片到系统相册: 海报素材使用图片宽750px: 注: 画布转图片时参数destWidth 值 须 * dpr 否则IOS测试生成的图片是模糊的: . ...

  4. 小程序canvas生成海报 字体在背景图下方

    小程序canvas生成海报 字体在背景图下方 图片是异步加载 可以放在回调里设置字体 也可以延迟放置 如果还有更好的方法可以留言

  5. uni-app app端用highcharts绘制图表,并生成海报保存到手机相册

    uni-app 打包app后 highcharts图表绘制不成功,不支持该方法,所以就考虑在app中嵌入webview h5页面,实现图表的绘制. 首先引用安装highcharts,封装成一个组件 n ...

  6. 微信小程序 —— canvas生成海报图与分享

    整体思路 获取手机屏幕大小去依据设计尺寸比例调整 -wx.getSystemInfo 网络图片.base64图片保存到到本地临时文件路径 canvas绘制图片 - wx.createCanvasCon ...

  7. 微信小程序之生成海报保存本地

    知识都在代码里 index.wxml <view class="canvas-box"><button bindtap="generate"& ...

  8. 小程序canvas生成海报图片压缩和失真问题解决

    微信小程序实现canvas按照原图等比例不失真绘制海报图,防止模糊 我这里的场景是收款二维码+收款背景图. 绘制二维码 我这里绘制二维码使用的 wxapp-qrcode ,也可以使用weapp-qrc ...

  9. 微信小程序合成海报_微信小程序 canvas生成海报图片模糊问题

    一.制作正常显示海报,生成二倍海报隐藏 代码如下 {{sendName}} 保存图片 /*css*/ .btn { width: 300rpx; height: 90rpx; line-height: ...

最新文章

  1. IntelliJ IDEA 12 创建Web项目 教程 超详细版
  2. html 获取cookie的值,js从Cookies里面取值的简单实现
  3. 云服务器怎么设置数据库文件,怎么设置云服务器数据库
  4. 5G NGC — BSF 会话绑定支持功能
  5. [ZJOI2007]仓库建设(斜率优化)
  6. h5 socket.io java,从HTML5 WebSocket到Socket.io
  7. Spring CommonsMultipartResolver 上传文件
  8. 【One by One系列】IdentityServer4(二)使用Client Credentials保护API资源
  9. redis——实战关注
  10. 网络性能测试工具iperf详细使用图文教程【转载】
  11. php7 void,2.10.PHP7.1 女神级教程-女神的私人信息 -【PHP 函数】
  12. cad页面布局快捷键_炸裂“图纸集”功能、高手都在偷偷用的CAD图纸管理神器
  13. bootstrap课程5 bootstrap中的组件使用的注意事项是什么
  14. 如何设置和修改网页地址栏图标favicon.ico?
  15. 【观察】OLED电视,凭什么成为游戏玩家的新宠?
  16. 汽车云智能采集服务 八爪鱼采集器在汽车行业网站的应用
  17. 开源项目-OA自动化管理系统
  18. macOS安装brew和使用brew
  19. Nullpoint及其相关的报错
  20. 从零开始学习SVM(二)---松弛变量

热门文章

  1. Carrying Conundrum CodeForces - 1567C
  2. 福州大学计算机陈晨,院科技节 - 福州大学电气工程与自动化学院
  3. 由互斥事件和独立事件谈if语句(if-else语句)的写法
  4. 4-Python3从入门到实战—基础之数据类型(字符串-String)
  5. oracle12c amm,oracle 11gR2和12C中引入AMM和hugepage的使用.
  6. platformIO 自定义板子方法
  7. 2014年美国数学建模竞赛C题总结
  8. 小鸟云产品/服务初体验
  9. mysql redis 点赞_Redis 实现点赞功能
  10. 高师培训计算机心得体会,培训学习心得体会范文