canvas长微博生成功能实践
0x00 概述
近日开发移动端H5遇到文字转图片的需求,类似长微博生成工具。由于需求简单,并未采用rasterizeHTML.js或html2canvas这类略显庞大的html转图片工具,而是采用canvas原生API直接在画布上生成图片。
理一下思路。
需求:前端实现文字转图片。超宽度文字换行显示,并可设置行高。
问题点:文字换行,文字行高实现,canvas导出图片。
0x01 文字换行与行高的原理与实现
CanvasRenderingContext2D对象唯一的打印文字方法 fillText(text, x, y [, maxWidth])
不支持文字超宽自动换行,即超宽文字被写出画布从而不可见。方法的第三个可选参数指定打印文本行的最大宽度,必要时会缩小整个文本行的字体尺寸(真是对文字换行功能毫无贡献啊)。
所以,必须手动实现文字换行功能。基本思路是迭代文本行的每一个字符,然后用measureText(text)
方法测量并累加字符宽度。当字符累计宽度即将超宽时,插入换行标志。当所有文字迭代完成后,就得到了一个已在所有换行位置插入换行标志的字符串。
遍历已插入换行标志的字符串时,每遇一个换行标志,Y轴坐标累加行高值一次。
参考:
fillText()
: https://developer.mozilla.org...measureText()
: https://developer.mozilla.org...
0x02 canvas导出图片
HTMLCanvasElement.toDataURL()
方法可导出画布图像为base64编码格式的图片。api见 https://developer.mozilla.org...
canvas长微博生成功能实践相关推荐
- wkhtmltoimage 卡住了_用rails做一个简单的长微博生成工具
长微博就是把文字转换成图片,主要用到的gem是imgkit. imgkit是一个通过open3来调用wkhtmltoimage生成图片的gem,源码不是很复杂,使用也很简单. 基本步骤如下: rail ...
- php 长微博程序,php仿照新浪微博长微博分页功能
仿照新浪微博长微博分页功能 微博内容在这里. //请保留著作权,作者:苹果巴士 www.ipkbus.com jeffxie@gmail.com //本代码目前不兼容IE6,更强大的功能请自行改进代码 ...
- 仿照新浪微博长微博分页功能
最近用新浪微博的时候,看了下微博滚动获取微博信息的功能,正好苹果巴士的客户想做一个差不多的功能,所以就分析了一下,大概思路是根据滚动条滚动事件来触发获取微博的AJAX,然后自动添加数据到页面,当然了, ...
- php把buffer转化为图片_长微博生成(将html转化为图片)原理浅析
在平时工作中有一些需求,简单而言就是需要将一些内容生成图片.简单的内容通过PhotoShop处理还行,但是类似于带表格等的内容,每次都通过PhotoShop进行处理太浪费时间.网上有很多类似于长微博等 ...
- 长微博生成(将html转化为图片)原理浅析
在平时工作中有一些需求,简单而言就是需要将一些内容生成 图片 .简单的内容通过PhotoShop处理还行,但是类似于带表格等的内容,每次都通过PhotoShop进行处理太浪费时间.网上有很多类似于 长 ...
- php 长微博程序,长微博生成工具PHP源码 根据文字生成长微博图片 - substr_count
PHP substr_count() 函数定义和用法substr_count() 函数计算子串在字符串中出现的次数.语法substr_count(string,substring,start,len ...
- php 长微博程序,PHP生成长微博
目前仅支持纯文字的长微博生成,而且输入的html只能包含p标签. http://leo108.com 过段时间会增加图片以及页眉页脚支持. http://leo108.com/pid-1907.asp ...
- 通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示
长微博工具非常有用,140字的要求可能阻止你写更多的内容,于是长微博工具应运而生,虽然网上有很多长微博工具,但是我都不是很满意,所以自己想做一个,通过做这个长微博工具,我学习到了很多东西,有两个难点, ...
- 生成图片长微博遇到的坑
公司的App生成图片长微博的功能已经有一段时间,在开发时遇到过截屏出现黑色的问题.之前我以为是iOS7和7以上系统的问题,代码是这样写的. + (UIImage*)snapshot { UIViewC ...
最新文章
- VC连接SQL server2005
- 《愤怒的小鸟》对移动互联网经营的启示
- [PAL编程规范]SAP HANA PAL多项式回归预测分析Polynomial Regression编程规范FORECASTWITHPOLYNOMIALR(预测)...
- SHELL脚本实现硬盘分区
- [学习笔记]Event与Bindable
- 实例27:python
- Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离
- 18年5年制计算机辅助考试题,2018年自考《计算机辅助教育》试题二
- java菜单如何点解_解读java菜单
- bt php,bt.php · jiehu0992/家谱familytree - Gitee.com
- 【博客迁移】hyrepo.com
- 玩Mega8 智能充电器-12. 终于实现-dV检测(转)
- 企业如何建立强大的绩效管理系统
- 思科路由器配置命令大全
- 关闭计算机安全模式,怎么关闭安全模式,bios安全启动模式
- 12306网站火车票抢票详细攻略(gohome抢票程序)
- 驱动学习(十)poll机制
- logTracker错误日志跟踪组件(二)
- 实用的一些网站 合集
热门文章
- pyhton学习之找出单词的个数并进行排序
- 金山30而立,怀念“第一程序员求伯君”
- draftsight linux 32,DraftSight停止提供Linux版:所有免费版将于2019年12月31日后停止运行...
- c# 收取邮件 解析_c#接收邮件
- 发邮件窗体【支持编辑邮件模板,使用wse多线程上传附件及发邮件(带附件)】以及在服务器端自动发邮件...
- 翻翻git之---溜的飞起的加载效果AVLoadingIndicatorView
- 利用计算机得到阻尼振动曲线的包络线公式,波尔共振实验阻尼系数的计算机拟合...
- Centos 6安装Maven
- 不义联盟网站无法连接服务器,不义联盟:人间之神无法连接服务器如何解决
- css引入样式-行内样式、内嵌样式和外链样式