JavaScript文字转图片

非常感谢这位博主提供的代码,以下只做代码记录
博文转载地址:https://blog.csdn.net/qq_30100043/article/details/76549377//绘制文字到canvas,判断换行位置,和设置canvas高度
function canvasWrapText(options) {var settings = {canvas:document.getElementsByTagName("canvas")[0], //canvas对象,必填,不填写默认找到页面中的第一个canvascanvasWidth:480, //canvas的宽度drawStartX:10, //绘制字符串起始x坐标drawStartY:30, //绘制字符串起始y坐标lineHeight:30, //文字的行高font:"24px 'Microsoft Yahei'", //文字样式text:"请修改掉默认的配置", //需要绘制的文本drawWidth:460, //文字显示的宽度color:"#000000", //文字的颜色backgroundColor:"#ffffff"//背景颜色};//将传入的配置覆盖掉默认配置if(!!options && typeof options === "object"){for(var i in options){settings[i] = options[i];}}//获取2d的上线文开始设置相关属性var canvas = settings.canvas;canvas.width = settings.canvasWidth;var ctx = canvas.getContext("2d");//绘制背景色ctx.fillStyle = settings.backgroundColor;ctx.fillRect(0,0,canvas.width,canvas.height);//绘制文字ctx.font = settings.font;ctx.fillStyle = settings.color;var lineWidth = 0; //当前行的绘制的宽度var lastTextIndex = 0; //已经绘制上canvas最后的一个字符的下标//由于改变canvas 的高度会导致绘制的纹理被清空,所以,不预先绘制,先放入到一个数组当中var arr = [];//换行拆分var multiText = settings.text.split("\n");//循环每一行内容$.each(multiText,function (rowIndex,rowText) {//当前行的绘制的宽度lineWidth = 0; //当前行的绘制的宽度lastTextIndex = 0; //已经绘制上canvas最后的一个字符的下标for(var i = 0; i<rowText.length; i++){var currentText = rowText.substr(lastTextIndex,i-lastTextIndex);//获取当前的截取的字符串的宽度lineWidth = ctx.measureText(currentText).width;if(lineWidth > settings.drawWidth){//判断最后一位是否是标点符号if(judgePunctuationMarks(rowText[i-1])){arr.push(rowText.substr(lastTextIndex,i-lastTextIndex));lastTextIndex = i;}else{arr.push(rowText.substr(lastTextIndex,i-lastTextIndex-1));lastTextIndex = i-1;}}//将最后多余的一部分添加到数组if(i === rowText.length - 1){arr.push(rowText.substr(lastTextIndex,i-lastTextIndex+1));}}});//根据arr的长度设置canvas的高度canvas.height = arr.length*settings.lineHeight+settings.drawStartY;ctx.font = settings.font;ctx.fillStyle = settings.color;for(var i =0; i<arr.length; i++){ctx.fillText(arr[i],settings.drawStartX,settings.drawStartY+i*settings.lineHeight);}//判断是否是需要避开的标签符号function judgePunctuationMarks(value) {var arr = [".",",",";","?","!",":","\"",",","。","?","!",";",":","、"];for(var i = 0; i< arr.length; i++){if(value === arr[i]){return true;}}return false;}return canvas.toDataURL();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 内置功能 函数 date_format函数

创建数据库db12 create database db12 charsetutf8; use db12; 准备表和记录 CREATE TABLE blog (id INT PRIMARY KEY auto_increment,NAME CHAR (32),sub_time datetime ); 插入记录 INSERT INTO blog (NAME, sub_time) VALUES(第1篇,2015-03-01 11:31:21),(第2篇,2015-03-11 …

低版本webview无法请求jquery ajax

大家好&#xff0c;我是烤鸭&#xff1a; 又来踩坑了。 1. 场景复现 有反馈我们的H5页面&#xff0c;无法正确显示页面。就类似下图这样&#xff0c;ajax没法请求到数据。 之前测试的时候是在web端做的测试&#xff0c;用安卓7.0和8.0的手机都试了一下&#xff0c;是没…

[css] CSS3中的transition是否可以过渡opacity和display?

[css] CSS3中的transition是否可以过渡opacity和display&#xff1f; transition过渡display是有一个前提条件: 浏览器渲染是在每一帧的最后&#xff0c;每一帧都会执行以下操作:js执行2.style加持3.layout4.paint5.composite在js执行过程中&#xff0c; 遇到DOM操作&#xff…

Ubuntu 无法应用原保存的显示器配置

Ubuntu开机之后页面出现&#xff1a;无法应用原保存的显示器配置所选模式均不匹配可能的模式&#xff1a;为 CRTC 63 尝试模式CRTC 63&#xff1a;尝试 800x60060Hz 模式输出在 1366x76860Hz (通过 0)CRTC 63&#xff1a;尝试 2560x160060Hz 模式输出在 1366x76860Hz (通过 0)C…

由excel导出引起的cpu 100% 和gc 的问题

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由excel导出 导致的cpu飙升200%&#xff0c;jvm 内存不足。 1. 场景复现 前端页面导出Excel&#xff0c;之前导出4,5W条数据都没什么问题的。 今天业务突然反馈说导出不了了&#xff0c;我试着导出了2w数据&#xff0…

[css] 说下background-color:transparent和opacity:0的区别是什么?

[css] 说下background-color:transparent和opacity:0的区别是什么&#xff1f; background-color:transparent: 只是把背景色设置为透明&#xff0c;并不会影响元素中的内容。可以利用 transparent 进行三角、扇形的设置。opacity: 0: 会影响整个元素&#xff0c;元素的内容也会…

win11耳机和扬声器怎么分开控制音量?

win11耳机和扬声器怎么分开控制音量&#xff1f; 有时候有这种需求&#xff0c;在办公位置工作听耳机&#xff0c;拔掉耳机后&#xff0c;扬声器需要自动禁止声音 1&#xff0c;搜索并打开Realtek Audio Console 2&#xff0c;点击左下角“设备高级设置”&#xff0c;播放设备…

ngix莫名挂掉 signal process started

大家好&#xff0c;我是烤鸭&#xff1a; 又到了采坑实录。ngix莫名挂掉 error.log一直出现 signal process started 查看了access.log和error.log access.log&#xff1a; 43.245.218.208 - - [06/Jan/2019:18:08:43 0800] "GET / HTTP/1.1" 200 555 "-"…

[css] z-index有时不起作用的原因是什么?怎么解决?

[css] z-index有时不起作用的原因是什么&#xff1f;怎么解决&#xff1f; 根元素 (HTML),z-index 值不为 "auto"的 绝对/相对定位&#xff0c;一个 z-index 值不为 "auto"的 flex 项目 (flex item)&#xff0c;即&#xff1a;父元素 display: flex|inline…

Docker安装nacos

docker安装nacos docker创建nacos容器 第一种&#xff08;不推荐&#xff0c;因为不能连接数据库&#xff0c;进行持久化&#xff09; #搜索可以使用的镜像 docker search nacos #拉取镜像 docker pull nacos/nacos-server# 运行nacos docker run \ --name nacos -d \ -p …

HttpsURLConnection 返回 400

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由 HttpsURLConnection 引起的返回值400的错误。 1. 场景复现 今天线上调用第三方接口的时候突然报错了。 严格来说也不是报错&#xff0c;就是发的请求不通了&#xff0c;http报400的错误。 问了下对接方&…

[css] 你有了解css计数器(序列数字字符自动递增)吗?如何通过css的content属性实现呢?

[css] 你有了解css计数器&#xff08;序列数字字符自动递增&#xff09;吗&#xff1f;如何通过css的content属性实现呢&#xff1f; counter-reset:设置计数器 counter-reset: count 0 /* 计数器从1开始 */ counter-increment: 递增数值 counter-increment: count 2 /* 用于c…

npm、webpack、vue-cli 快速上手版

Node.js npm 什么是Node.js 以及npm 简单的来说 Node.js 就是运行在服务端的JavaScript&#xff0c;基于Chrome V8 引擎的。 npm 是Node.js 的包管理工具。 npm的安装和更新 Node.js下载安装 Node.js 官网下载安装。npm自带的包管理工具。 查看安装版本信息&#xff1a; -…

idea修改maven helper右键run maven的位置

idea修改 maven helper右键run maven的位置 现在调整到最上面后&#xff0c;进行maven的命令操作就非常的方便了&#xff01;

springboot webservice cxf 客户端调用

大家好&#xff0c;我是烤鸭&#xff1a; 这篇文章分享的是xcf webservice接口调用。如果接口提供方要求是webservice调用的话&#xff0c;可以参考这篇内容。 1. pom文件 <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-front…

[css] 说说你对css的will-change属性的理解,它有什么作用呢?

[css] 说说你对css的will-change属性的理解&#xff0c;它有什么作用呢&#xff1f; 告诉浏览器,这个元素的某些属性可能会频繁变动触发回流&#xff0c;要求浏览器给予资源进行优化&#xff0c;一般浏览器会给这个元素单独生成一个图层渲染,gpu加速等提前优化手段 不应过度使…

MFC版链表实现稀疏多项式相加减

链表实现多项式运算&#xff08;加减&#xff09;MFC可视化版题目 设计一个一元稀疏多项式简单计算器。 基本要求 &#xff08;1&#xff09;输入并建立两个多项式&#xff1b; &#xff08;2&#xff09;多项式a与b相加&#xff0c;建立和多项式c&#xff1b; &#xff08;3&a…

WindTerm导出会话

WindTerm的session配置并无法被适用于其他软件中&#xff0c;所有的session保存在WindTerm安装路径下的profiles文件夹内&#xff0c;如果需要更新版本或回退&#xff0c;将所安装的版本覆盖即可&#xff0c;或是将profiles复制于新路径下。 图标闪烁设置、会话保存-导入导出 …

[官方] mysql 性能优化文档(中英文自译)

大家好&#xff0c;我是烤鸭&#xff1a; 根据官方文档翻译并精简部分内容。建议有时间的朋友下载原版查看&#xff0c;全文106页pdf&#xff0c;快的话1-2天就能看完。自己翻译的有些地方可能不完整&#xff0c;欢迎指正。官方pdf下载&#xff0c;需登录&#xff1a;https://w…

使用wiki.js部署团队知识库

1.安装NODE.JS 参考教程 https://xie.infoq.cn/article/6820ea5b625f4e163ccb76cec 1.1 下载nodejs安装包 http://nodejs.cn/download/ 1.2 上传到服务器soft目录后进行解压 # 解压 tar -xf node-v16.18.0-linux-x64.tar.xz # 删除安装包 rm -rf node-v16.18.0-linux-x64.ta…