首页 > 其他分享 >html canvas添加文字(自动换行)

html canvas添加文字(自动换行)

时间:2022-11-26 18:56:57浏览次数:50  
标签:canvas 换行 ctx initHeight html let str left

html canvas添加文字

遇到\r换行

超过宽度自动换行

<html>

<body>
  <img width="1070" height="1070" id="img" />
  <script type="text/javascript">
    const canvas = document.createElement("canvas");
    const ctx = canvas.getContext("2d");
    canvas.width = 1070;
    canvas.height = 1070;
    ctx.textAlign = "left";
    ctx.textBaseline = "top";

    let canvasWidth = 950; // 计算canvas的宽度
    let initHeight = 50; // 绘制字体距离canvas顶部初始的高度
    let left = 60;

    let lineWidth = 0;
    let lastSubStrIndex = 0;
    let title = "标题";
    let str = "党的二十大报告强调,全党必须牢记,坚持党的全面领导是坚持和发展中国特色社会主义的必由之路\r中国特色社会主义是实现中华民族伟大复兴的必由之路,团结奋斗是中国人民创造历史伟业的必由之路,贯彻新发展理念是新时代我国发展壮大的必由之路,全面从严治党是党永葆生机活力、走好新的赶考之路的必由之路。"; // 内容

    ctx.font = "bold 44px 宋体";
    ctx.fillStype = "#000";
    ctx.fillText(title, left, initHeight);
    initHeight += 52;
    ctx.font = "normal 36px 宋体";

    ctx.font = title;
    canvasWidth = 930; // 计算canvas的宽度
    left = 70;
    for (let i = 0; i < str.length; i++) {
      lineWidth += ctx.measureText(str[i]).width;

      let iswarp = false; // 下一个字符是否换行
      const next_ch = str[i];
      if (next_ch === "\r") {
        iswarp = true;
      }
      if (lineWidth > canvasWidth || iswarp) {
        ctx.fillText(str.substring(lastSubStrIndex, i), left, initHeight); // 绘制截取部分
        initHeight += 40; // 20为字体的高度
        lineWidth = 0;
        if (iswarp) {
          lastSubStrIndex = i + 1;
          i = i + 1;
        } else {
          lastSubStrIndex = i;
        }
      }
      if (i === str.length - 1) {
        // 绘制剩余部分
        ctx.fillText(str.substring(lastSubStrIndex, i + 1), left, initHeight);
      }
      
      const url = canvas.toDataURL("image/png");
      document.getElementById("img").src = url;
    }
  </script>
</body>
</html>

 

标签:canvas,换行,ctx,initHeight,html,let,str,left
From: https://www.cnblogs.com/xbzhu/p/16928003.html

相关文章

  • HTML具体元素
    HTML的标签文档的头部和主题<html><head>这里是文档的头部.........</head><body>这里是文档的主体.........</body></html> HTML标题标......
  • HTML元素
    HTML文档是由HTML元素定义的。HTML元素HTML元素指的是从开始标签(starttag)到结束标签(endtag)的所有代码。例: 开始标签元素内容结束标签<p>Thisisaparag......
  • 如何用JavaScripte和HTML 实现一整套的考试答题卡和成绩表
    相信在学校的你都有这样的体验,临近考试,要疯狂的“背诵”否则成绩单就要挂零,因为答题卡全部涂抹都是错的。那么毕业多年的你,没有了考试,有没有一丝怀念涂答题卡的时候,有没有......
  • HTML重学--基础
    <html>与</html>之间的文本描述网页<body>与</body>之间的文本是可见的页面内容<h1>与</h1>之间的文本被显示为标题<p>与</p>之间的文本被显示为段落<!......
  • HTML
    1.HTML1.1什么是HTMLHTML:HyperTextMarkupLanguage(超文本标记语言)超文本包括:文字、图片、音频、视频、动画等HTML5的优势:世界知名浏览器厂商对HTML5的支持​ 通......
  • 5-6 显示html页面-使用post实现登录
    1.创建自己的应用(app)文件夹执行下面的命令,将自动生成对应的文件夹polls是应用名称,可以自己更改pythonmanage.pystartapppolls在主文件中settings中添加应用......
  • HTML
    一、HTML1、系统结构2、HTML的介绍,开发与运行3、HTML的标签3.1基本标签3.2表格标签​ "table"标签用来插入表格;"tr"标签用来插入表格中的一行,这个标签在......
  • canvas绘制背景图片,并控制图片大小;createPattern的使用;
    1.需求:用图片填充canvas画布,并且能控制图片的大小和重复次数,实现的效果如下:   2.HTML代码实现1<html>2<head>3<title></title>4<metachars......
  • [HTML+CSS]电商网站模板
    [HTML+CSS]电商网站模板b站白嫖的网课,黑马的小兔鲜儿案例,教程链接点这里就行成品文件目录结构CSSbase.css:基本样式,内外边距,字体之类的common.css:网页的公共样式,一般是heade......
  • 利用canvas+js完成滑块验证码中canvas部分思路
    1.最终效果2.滑块验证码思路大概思路:设置两个画布,一个为显示图像的canvas画布,一个为拼图的block画布,block画布拼图内容从图像画布中的一部分裁剪得到(使用clip()),......