博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas长微博生成功能实践
阅读量:7142 次
发布时间:2019-06-29

本文共 597 字,大约阅读时间需要 1 分钟。

0x00 概述

近日开发移动端H5遇到文字转图片的需求,类似长微博生成工具。由于需求简单,并未采用或这类略显庞大的html转图片工具,而是采用canvas原生API直接在画布上生成图片。

理一下思路。

  1. 需求:前端实现文字转图片。超宽度文字换行显示,并可设置行高。

  2. 问题点:文字换行,文字行高实现,canvas导出图片。

0x01 文字换行与行高的原理与实现

CanvasRenderingContext2D对象唯一的打印文字方法 fillText(text, x, y [, maxWidth]) 不支持文字超宽自动换行,即超宽文字被写出画布从而不可见。方法的第三个可选参数指定打印文本行的最大宽度,必要时会缩小整个文本行的字体尺寸(真是对文字换行功能毫无贡献啊)。

所以,必须手动实现文字换行功能。基本思路是迭代文本行的每一个字符,然后用measureText(text)方法测量并累加字符宽度。当字符累计宽度即将超宽时,插入换行标志。当所有文字迭代完成后,就得到了一个已在所有换行位置插入换行标志的字符串。

遍历已插入换行标志的字符串时,每遇一个换行标志,Y轴坐标累加行高值一次。

参考:

  1. fillText():

  2. measureText():

0x02 canvas导出图片

HTMLCanvasElement.toDataURL()方法可导出画布图像为base64编码格式的图片。api见

转载地址:http://wtwgl.baihongyu.com/

你可能感兴趣的文章
js中获取键盘事件
查看>>
面试(4)-spring-Spring面试题和答案
查看>>
请教 JTable 里的单元格如何使得双击进入单元格后,单元格的内容处于全选中状态...
查看>>
jQuery 各类判断函数汇总
查看>>
Android studio 分32位64位版本吗?
查看>>
UIcollectionView的使用(首页的搭建1)
查看>>
[原创]AM3352 + TPS65910 调试方法+调试记录
查看>>
.net基本数据类型操作
查看>>
docker 应用-2(Dockerfile 编写以及镜像保存提交)
查看>>
ubuntu 下安装查看pdf的工具
查看>>
UIApplication深入研究
查看>>
解决Ubuntu 12.04更新后 ”系统的网络服务与此版本的网络管理器不兼容“问题
查看>>
python变量
查看>>
牛顿迭代法
查看>>
mac os 中类似于Linux的yum工具,或ubuntu的apt-get工具Homebrew
查看>>
一种美-无法言语
查看>>
Unity场景渲染相关实现的猜想
查看>>
面向对象编程(十四)——面向对象三大特性之多态①
查看>>
单例模式
查看>>
Android 数据库 LiteOrm 的使用
查看>>