在 JS 中调整 canvas 里的文字间距

这篇具有很好参考价值的文章主要介绍了在 JS 中调整 canvas 里的文字间距。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现说明:

在 JS 中 canvas 原生没有支持对文字间距的调整,我们可以通过将文字的每个字符单独渲染来实现。本案例从 CanvasRenderingContext2D 对象的原型链上扩展了一个用于绘制带间距的函数 fillTextWithSpacing(),使用方式与原生 fillText() 一致,除了多一个用于设置文字间距的参数。下面展示了详细用法。

效果展示:

在 JS 中调整 canvas 里的文字间距

在线演示 https://bi.cool/bi/ObU1xOY

实现代码:

html

<canvas id="canvas" width='440' height="130"></canvas>

javascript

/**
 * 绘制带间距的文字
 * @param text 要绘制的文字
 * @param x 绘制的位置 x
 * @param y 绘制的位置 y
 * @param spacing 文字间距
 */
CanvasRenderingContext2D.prototype.fillTextWithSpacing =
function(text,x,y,spacing=0){
    // 如果间距为0,则不用对每个字符单独渲染以节省性能
    if(spacing === 0){
        this.fillText(text,x,y);
        return;
    }

    let totalWidth = 0; // 已渲染字符所占用的宽度
    // 对每个字符单独渲染
    for(let i=0; i<text.length; i++){
        this.fillText(text[i],totalWidth,y);
        //累计已占用宽度
        totalWidth += ctx.measureText(text[i]).width + spacing;
    }
}

//创建画布
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');

//定义文字样式
ctx.font = "bold 40px caption";
ctx.fillStyle = "#54a8eB";

//绘制文字
ctx.fillText('正常间距 - 阳光知道', 0, 40);
ctx.fillTextWithSpacing('扩大间距 - 阳光知道', 0, 80, 6);
ctx.fillTextWithSpacing('缩小间距 - 阳光知道', 0, 120, -5);

代码说明:

我们是直接从原型链上实现的绘制带间距的文字函数,所以可以直接通过 ctx.fillTextWithSpacing() 的方式调用。

其中变量 ctx 是一个 CanvasRenderingContext2D对象,我们用到它的以下属性与函数:

  • fontfillStyle 用来设置设置字体样式与颜色
  • measureText()函数 用于获取文字所占用的宽高信息
  • fillText()函数 用于在画布上绘制文字

版权声明:[自由转载-注明出处-非商用-非衍生](知识共享许可协议)文章来源地址https://www.toymoban.com/news/detail-760567.html

到了这里,关于在 JS 中调整 canvas 里的文字间距的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • latex调整毕业论文目录中章节之间的间距

    333latex调整目录章节之间的间距 如图,在latex生成的目录中,章节段落之间会有较大的空隙,对于有些学校的毕业论文的各式要求是不符合的,比如浙江工业大学。 怎么调整呢? 我在.cls文件中添加如下命令即可自行控制目录之间的章节间距 数值可以自己调整。 之后就可以将

    2024年02月22日
    浏览(38)
  • CSS 设置文字间距

    在 CSS 中,可以使用 letter-spacing 属性来设置字符间距。该属性控制每个字符之间的距离,可以设置负值来让字符更接近,也可以设置正值来让字符之间的距离更远。 以下是一个示例,将字符间距设置为 0.1em: 在这个示例中, p 元素中的所有文本都将具有 0.1em 的字符间距。如

    2023年04月24日
    浏览(73)
  • 纯前端--原生js将html页面变成pdf文件(html2canvas+jsPDF)

    1、将文档放在本地,用原生js进行引用和使用。 ① 新建一个名为 html2canvas.min.js 的文件,并且将线上的内容进行复制。 ② 引入 js 文件: 2、使用 npm 进行安装使用: 待续。。。 github 中文网站 CDN Jspdf.es.js:ES 2015 模块格式。 Jspdf.umd.js:UMD模块格式,用于 AMD 或脚本标签加载

    2024年02月08日
    浏览(57)
  • Python批量调整Word文档中的字体、段落间距及格式python调用函数批量调整word格式

        最近关于批处理格式的问题我查了很多资料,但是都没有找到自己想要的答案。 接上期,上篇博文我简单介绍了python操作Word的一些基本操作,本篇重点介绍如何批量将python中的文字导入到Word中,评设置其字体字号、间距、样式等。 Python读写word文档 用python 处理docx文档

    2024年02月13日
    浏览(48)
  • Android入门教程 | TextView简介(宽高、文字、间距)

    TextView简介 文字,是我们传达信息的一种常见方式。在安卓应用上显示文字,我们通常使用TextView。 之前我们已经知道如何获取到layout中的TextView,也知道 setText() 方法可以修改显示的文字。 结合我们实际的生活和学习经验,写字的时候,有哪些方面是可以由我们来控制的?

    2024年02月04日
    浏览(43)
  • 【QT】如何调整 comboBox下拉列表的间距或高度以及使下拉列表的字体居中

    默认的QComboBox的下拉列表看起来非常的拥挤,且不美观。 那怎样调整comboBox下拉列表的间距或高度呢?请看下面的方法: 最简单的方法,两行代码就可解决: 这种方法同时可以实现其comboBox中的 当前项 或 下拉列表项 的显示位置(靠左,靠右,居中)

    2024年02月13日
    浏览(101)
  • webrtc在js里的实现

    WebRTC(Web Real-Time Communication)是一项开放的浏览器技术,它允许浏览器之间建立点对点(peer-to-peer)连接,实现音频、视频、文件的传输和通信。它的实现一般需要使用JavaScript语言。 在JavaScript中,WebRTC API包括三个核心接口: MediaDevices:用于访问摄像头、麦克风等媒体设备

    2024年02月11日
    浏览(26)
  • Canvas、SVG实现鼠标滑过某个区域高亮显示的方案说明

    1、需求背景: 用户提供了某个厂区的底图(就一张静态图片),在底图中,划分了10个不规则区域,给了10个区域的高亮、开灯效果图片(切好了图),鼠标滑过每个区域的时候,要高亮显示,开灯的时候,显示开灯效果;看到这个需求的时候,挺懵的,有点不知从何下手,

    2024年02月16日
    浏览(37)
  • 快速开发web甘特图功能:MZGantt原生js甘特图插件使用说明

    MZGantt是一款原生js开发的甘特图插件。支持vue,ts,js等,支持流行的各种前端框架,可以快速引用到我们的web程序或者移动应用中。 拖拽编辑: 支持拖拽编辑 行内编辑: 支持行内编辑功能 弹框支持: 提供任务model,与外部弹框配合,完成任务编辑。 列自定义: 支持自定

    2024年04月17日
    浏览(35)
  • 【Python数据可视化】matplotlib之设置子图:绘制子图、子图共享x轴坐标、调整子图间距、设置图片大小

    文章传送门 Python 数据可视化 matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图 matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值 matplotlib之增加图形内容:设置图例、设置中文标题、设置网格效果 matplo

    2024年01月18日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包