这里写目录标题

  • 步骤
      • 1. 创建画布
      • 2. 画图片
      • 3. 画文字
      • 4. 画base64图片
    • 保存
  • 完整代码
    • js
    • vue

这里介绍使用js(jQuery)或者vue使用画布绘制海报,小程序uniapp可参考我的另一篇博客 canvas画布,小程序端画base64、网络图片

这是一个常见的邀请效果图,可以看成这几部分:

1. 背景图
2. 中间的白色背景图
3. 中间的二维码
4. 文字
这次的步骤使用js制作,vue、jQuery同理,最后会放出源码

步骤

1. 创建画布

<canvas id="myCanvas" width="360" height="570" style="border: 1px solid #FF0000;"></canvas>
<!-- 这里的border为了看清楚canvas位置,可删除 -->
<!-- 宽高为数字,不支持%,想要铺满可以获取屏幕显示尺寸进行比例处理 -->

2. 画图片

让我们先把背景图画上去,我这现在用的是本地的图片;

先声明画布,不声明怎么画是不;

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img1 = new Image();
img1.src = "bg.png"; //背景图
img1.onload = function() {ctx.drawImage(img1, 0, 0,360,570);//图片路径 , x轴位置 , y轴位置 , 宽度 , 高度var img2 = new Image();img2.src = "ffffff.png"//白色方块图img2.onload = function() {ctx.drawImage(img2, 70, 70, 240, 320)}
}

白色图片也是这种方法,只是注意顺序即可,就会覆盖到第一张图片上面,效果图:

3. 画文字

剩下的就是在画布上面写文字;

ctx.fillStyle = '#1296db';
ctx.textAlign = 'center';
ctx.font = 'normal 29px 楷体';
ctx.fillText('好友召集令', 190, 50);
ctx.fillStyle = '#000000';
ctx.font = 'normal 25px 宋体';
ctx.fillText('邀请码', 190, 130)
ctx.font = 'normal 15px 宋体';
ctx.fillText('长按也可保存分享哟~', 190, 410);

按照这样的写法,设置样式,内容等,按照顺序写进去即可;效果图:

4. 画base64图片

var base = "请求的base64资源"
var img3 = new Image();
img3.src = base;
img3.onload=function(){ctx.drawImage(img3, 90, 180, 200, 200);
}

效果图:

到这,绘制完成了,剩下的就是保存了。

保存

<button type="button" onclick="saveAsLocalImage()">保存</button>
function saveAsPNG(canvas) {return canvas.toDataURL("image/png");
}function downLoad(url) {var oA = document.createElement("a");oA.download = ''; // 设置下载的文件名,默认是'下载'oA.href = url;document.body.appendChild(oA);oA.click();oA.remove(); // 下载之后把创建的元素删除
}function saveAsLocalImage() {downLoad(saveAsPNG(myCanvas));
}

完整代码

js

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /></head><body><canvas id="myCanvas" width="360" height="570"></canvas><button type="button" onclick="saveAsLocalImage()">an</button><script type="text/javascript">var c = document.getElementById("myCanvas");var ctx = c.getContext("2d");var img1 = new Image();img1.src = "bg.png"; //背景图img1.onload = function() {ctx.drawImage(img1, 0, 0, 360, 570)var img2 = new Image();img2.src = "ffffff.png"img2.onload = function() {ctx.drawImage(img2, 70, 70, 240, 320)ctx.fillStyle = '#1296db';ctx.textAlign = 'center';ctx.font = 'normal 29px 楷体';ctx.fillText('好友召集令', 190, 50);ctx.fillStyle = '#000000';ctx.font = 'normal 25px 宋体';ctx.fillText('邀请码', 190, 130)ctx.font = 'normal 15px 宋体';ctx.fillText('长按也可保存分享哟~', 190, 410);var base = "请求的base64资源"var img3 = new Image();img3.src = base;img3.onload = function() {ctx.drawImage(img3, 90, 180, 200, 200);}}}function saveAsPNG(canvas) {return canvas.toDataURL("image/png");}function downLoad(url) {var oA = document.createElement("a");oA.download = ''; // 设置下载的文件名,默认是'下载'oA.href = url;document.body.appendChild(oA);oA.click();oA.remove(); // 下载之后把创建的元素删除}function saveAsLocalImage() {downLoad(saveAsPNG(myCanvas));}</script></body>
</html>

vue

图片路径建议使用网络路径

<template><div><canvas id="myCanvas" width="360" height="570"></canvas><button type="button" @click="save">保存</button></div>
</template><script>export default {mounted() {var c = document.getElementById("myCanvas");var ctx = c.getContext("2d");var img1 = new Image();img1.src = "blog.csdnimg.cn/20200408175542410.png"; //背景图img1.onload = function() {ctx.drawImage(img1, 0, 0, 360, 570)var img2 = new Image();img2.src = "../assets/ffffff.png"img2.onload = function() {ctx.drawImage(img2, 70, 70, 240, 320)ctx.fillStyle = '#1296db';ctx.textAlign = 'center';ctx.font = 'normal 29px 楷体';ctx.fillText('好友召集令', 190, 50);ctx.fillStyle = '#000000';ctx.font = 'normal 25px 宋体';ctx.fillText('邀请码', 190, 130)ctx.font = 'normal 15px 宋体';ctx.fillText('长按也可保存分享哟~', 190, 410);var base = "请求的base64资源"var img3 = new Image();img3.src = base;img3.onload = function() {ctx.drawImage(img3, 90, 180, 200, 200);}}}},methods: {saveAsPNG(canvas) {return canvas.toDataURL("image/png");},downLoad(url) {var oA = document.createElement("a");oA.download = ''; // 设置下载的文件名,默认是'下载'oA.href = url;document.body.appendChild(oA);oA.click();oA.remove(); // 下载之后把创建的元素删除},save() {this.downLoad(this.saveAsPNG(myCanvas));}}}
</script><style>
</style>

使用canvas绘制海报,包含文字、图片、base64图片相关推荐

  1. canvas绘制海报中文字自动换行

    canvas:canvas绘制海报中文字自动换行 问题描述 canvas绘制的海报在某一行文字过多时不会自动换行(设置文本宽度无用) 源代码 context.fillText(this.data.go ...

  2. canvas绘制海报分享,海报中设置圆角二维码

    canvas绘制海报分享,海报中设置圆角二维码,背景图,动态的文字,绘制完成以后保存为图片,可长按分享海报图片. 下面看看效果图:(假设教师的图片是二维码) 这其中,背景图元素,还有教师的图片(假设是 ...

  3. canvas绘制海报及点击保存海报

    1.canvas绘制海报 createcanvas() {let that = this,windowW = that.data.windowWconst query = wx.createSelec ...

  4. uniapp使用canvas绘制海报

    Uniapp中使用canvas绘制海报可以按照以下步骤进行: 1. 引入需要绘制的图片资源 这些图片可以是本地的,也可以是远程的.可以将图片资源放在项目的`static`目录下,例如:`static/ ...

  5. 小程序php生成海报,小程序用canvas绘制海报的做法

    2020年第一篇文章,年初忙着复习刷题一直没空去写东西,书看的越多感觉越技不如人,始终徘徊在小菜鸡的行列中,最近项目里正好有一个canvas的业务,突然又燃起了我一个UI前端的火种,记下了踩坑和思考. ...

  6. 微信小程序使用canvas绘制海报并保存本地相册

    在做微信小程序的时候,很多都会用到生成海报分享功能,刚好最近项目有这个需求,今天就发出来记录下 首先是使用canvas绘制一张海报,微信小程序的canvas有老版本和新版本我是用的是新版本 代码如下 ...

  7. 使用canvas绘制海报

    想要绘制这样的海报 1.结构 <!-- 生成海报的canvas --> <view class="my-canvas-box" @touchmove.stop.p ...

  8. 小程序中使用canvas绘制海报

    最近项目需求使用canvas绘制朋友圈可分享的海报,中间遇到很多问题,于是上网搜索,完美解决后,在此总结一下. 先来看一下效果图,点击按钮生成带二维码的图片. 1.关于canvas画布的宽度和高度 w ...

  9. uniapp Canvas绘制海报

    在绘制的过程中可能会需要文字换行 文字换行在我上篇文章,链接:文字换行. 之前写过一个分享海报,但是觉得代码逻辑不清晰所以重新写一个 我们的需求是这样子的 <view class="w ...

最新文章

  1. LeetCode简单题之字符串中的单词数
  2. 图文解说oracle视图
  3. MFC Timer定时器
  4. wxWidgets:wxThread类用法
  5. RSA 前段加密 java 后台解密 已调试通过
  6. lucene 建索引
  7. 超级硬盘数据恢复软件v2.7.2.6_超级硬盘数据恢复软件的U盘存储卡删除文件的恢复方式...
  8. HttpWebRequest中GetResponse或者说GetRequestStream偶尔超时,或者是各种操作超时造成的假死的一些解决方案...
  9. 前端开发中最常用的JS代码片段
  10. 拓端tecdat|R语言贝叶斯非参数模型:密度估计、非参数化随机效应meta分析心肌梗死数据
  11. 【疾病分类】基于matlab SVM农作物叶子虫害识别与分类【含Matlab源码 624期】
  12. 企业网站建设方案策划书
  13. 使用CASEWHEN批量拼凑Update语句
  14. 《企业管理学》管理理论的产生于发展知识点总结
  15. 【题解】二进制优化的多重背包问题
  16. 用python爬取百科糗事的小项目
  17. 微信群内接龙的excel公式处理
  18. WIN7 安装 SQL2000
  19. java timer schedule_Java Timer的使用,timer.schedule定时执行
  20. 项目实战 航班飞行网图分析

热门文章

  1. 仿支付宝首页应用管理(拖拽排序,添加删除)
  2. 隐藏WiFi信号的小技巧
  3. Python中Print()函数的用法___实例详解(二)(全,例多)
  4. itchat实现命令行聊天+记录聊天图片/表情
  5. Army Darkness Defense(AOD)攻略
  6. 千万不要在国内某软件站下载 Chrome,已有网友中招!
  7. a73*2+a53*2指的是什么_5分钟带你快速了解,什么是着陆页
  8. 7-20打印九九口诀表
  9. 计算机用户密码开机设置,电脑密码怎么设置,教您设置电脑开机密码
  10. 拍室内人像,这4个技巧请收好