关于h5绘制canvas生成图片的注意点!
1、第一个是关于移动端自适应的问题:
答:如果是最后只要一张canvas生成的图片,而不是要绘制的canvas的图形,则不需要考虑自适应,绘制canvas的时候的宽高,可以直接写成UI提供的图的大小,比如UI提供的图是 750 * 1280 ,则绘制canvas的时候,所有的数据都可以
以375*640来进行计算,固定好即可!这个跟后台绘制图片的原理一样,我们不需要考虑自适应,ui给什么图,或者说我们希望要多大的图片,我们直接绘制即可,因为图片最后自己可以按比例伸缩,默认即是自适应!
2、关于H5绘制canvas的多行文本,我们可以利用测量宽度进行自动换行绘制文字!
3、绘制图片完成后再绘制文字,即可解决文字在图片底部的问题!
具体代码如下:
/**
* 绘制canvas
*/
function draw(name='大威德', score = 23, level = 1, str = '哈哈哈哈') {
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
// 绘制背景
var img = new Image();
img.src = "images/newbg.jpg";
img.onload = function () {
ctx.drawImage(img, 0, 0,375,640);
// 绘制底部文字
ctx.font = "bold normal 20px Microsoft YaHei";
ctx.fillStyle = "black";
ctx.fillText(name, 375 * 0.18, 640 * 0.34);
ctx.font = "bold normal 20px Microsoft YaHei";
ctx.fillStyle = "red";
ctx.fillText(score, 375 * 0.63, 640 * 0.345);
ctx.fillStyle = "black";
ctx.fillText(level, 375 * 0.37, 640 * 0.458);
ctx.font = "normal 18px Microsoft YaHei";
ctx.fillStyle = "black";
// 绘制多行文字
canvasTextAutoLine(str, c, 375 * 0.1, 640 * 0.5, 20);
}; }
/*
str:要绘制的字符串
canvas:canvas对象
initX:绘制字符串起始x坐标
initY:绘制字符串起始y坐标
lineHeight:字行高,自己定义个值即可
*/
function canvasTextAutoLine(str, canvas, initX, initY, lineHeight) {
var ctx = canvas.getContext("2d");
var lineWidth = 0;
var canvasWidth = document.documentElement.clientWidth;
var lastSubStrIndex = 0;
for (let i = 0; i < str.length; i++) {
lineWidth += ctx.measureText(str[i]).width;
if (lineWidth > canvasWidth * 0.8) {//减去initX,防止边界出现的问题
ctx.fillText(str.substring(lastSubStrIndex, i), initX, initY);
initY += lineHeight;
lineWidth = 0;
lastSubStrIndex = i;
}
if (i == str.length - 1) {
ctx.fillText(str.substring(lastSubStrIndex, i + 1), initX, initY);
}
}
}
关于h5绘制canvas生成图片的注意点!的更多相关文章
- 关于H5页面中生成图片的两种方式!
前言: 我们在做项目过程中,经常会遇到自定义生成一张图片并可以长按保存.长按保存图片在微信等浏览器中默认就有,那么对于生成图片的有哪些方式呢? 方法一: 利用canvas绘制图形,然后生成图片 代码如 ...
- 解析json结构绘制canvas
在工作中偶尔会遇到绘制转发卡/邀请卡的业务,且这个转发卡/邀请卡的风格会有很多,要求最后生成图片.这时候如果使用一张图片绘制一个canvas,这个工作量会相当大.分析一下转发邀请的内容,会发现所有的里 ...
- HTML5 canvas生成图片马赛克特效插件
HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...
- h5标签canvas关于getImageData跨域的问题
h5标签canvas关于getImageData跨域的问题 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): ...
- javascript canvas 生成图片的方法
javascript canvas 生成图片的方法 先生成base64格式的图片 然后ajax传到后台 写入服务器文件夹即可<pre><!DOCTYPE HTML><ht ...
- canvas 将html绘制图片 生成图片链接
废话不多说,直接上代码 其中图片地址换成你的,自己玩儿去吧 <!DOCTYPE html> <html> <head> <meta charset=" ...
- h5学习-canvas绘制矩形、圆形、文字、动画
绘制矩形<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- h5的canvas绘制方格(边框随即色)
文章地址 https://www.cnblogs.com/sandraryan/ 两个循环绘制 <body> <canvas id="cv" width=&quo ...
- h5 的canvas绘制基本图形
文章地址:https://www.cnblogs.com/sandraryan/ canvas是一个标签,可用于绘制复杂图形,渲染效果比普通DOM快 某些低版本浏览器不支持 canvas 使用原生几乎 ...
随机推荐
- 利用BGP虚拟下一跳实现链路负载均衡
最近针对BGP链路负载均衡方案“虚拟下一跳”进行了总结,现将总结的PPT贴上来.
- Lambda表达式资料整理
重温委托,匿名方法,Lambda,泛型委托,表达式树 第一:委托 有些教材,博客说到委托都会提到事件,虽然事件是委托的一个实例,但是为了理解起来更简单,今天只谈委托不谈事件.先上一段代码: 下边的 ...
- .net 用ajaxFileUpload 上传超过20M文件设置
1.在web.config的 <system.web> 节点里面添加 <httpRuntime targetFramework="4.5.2" execu ...
- SpringBoot究竟是如何跑起来的?
摘要: 神奇的SpringBoot. 原文:SpringBoot 究竟是如何跑起来的? 作者:老钱 Fundebug经授权转载,版权归原作者所有. 不得不说 SpringBoot 太复杂了,我本来只想 ...
- xxxx-xx-xx的时间的加减
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- JSON WEB TOKEN(JWT)的分析
JSON WEB TOKEN(JWT)的分析 一般情况下,客户的会话数据会存在文件中,或者引入redis来存储,实现session的管理,但是这样操作会存在一些问题,使用文件来存储的时候,在多台机器上 ...
- iOS----------检测app进入后台或前台
开发播放器的时候,经常需要检测app进入后台(暂停播放)或者进入前台(开始播放).方法非常简单. 1.检测app进入后台 // 在AppDelete实现该方法 - (void)applicationD ...
- Android Studio调试手机或者安装APK的时候出现install failed test only
1.检查\app\src\main\AndroidMainfest.xml中是否有testOnly属性为true,如果有去掉或者改为false 2.检查Android Studio和gradle版本是 ...
- go语言打造个人博客系统(二)
go语言打造个人博客系统(二) 在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...
- Server 2008 R2多用户远程桌面连接授权,解决120天过期问题
在工作中,我们往往需要远程服务器,经常会遇到以下这两个麻烦事. 一.远程桌面的连接数限制,超出系统就会提示超过连接数. 二.远程桌面连接时,同一个用户不能同时远程2个桌面连接. ----------- ...