`
danny.chiu
  • 浏览: 89375 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

canvas font组件

阅读更多
为了响应淘宝KISS理念,为中国开源做小点贡献,故有此文。

主要内容就是实现canvas显示文字,并做好这件简单的事。

策划总是会提出各种需求,如果是dom结构,直接用css样式就可以实现,现在canvas怎么办呢?本文以此为切入点,实现了常规dom里面的样式接口。现列出如下:
top, left
width, height // 自适应并换行
text-align
text-indent
line-height
letter-spacing
font-size
font-weight
font-family
color


现在策划这时还要站出来,我要显示一句话内包含二处高亮,二处大字体,一处粗体,一处隶书。。。

我们就SB了,但我们不能坐以待毙啊,本着不会美术的策划不是好程序的心态,咱们得搞定他。
这时候可能有人会怀念dom,直接用<span style="..."></span>多好啊,或者wiki写法你好吗,也行啊。。现在肿么办?一句话分成若干个文字精灵?再排位置?如果是动态新闻呢?天天得换啊??

好吧,经过我们若干一行人的讨论,使用类wiki的写法,实现思路最后说:
引用
“作为公司[color=#F00;weight=bold;size=16;font=隶书]老板[/],努力发展自己的公司吧!给公司起个好[color=red]名字[/],建造属于自己的[size=18]超级公司[/]。”

啊,世界清静了,现在你满意了吧!

最后再介绍下实现思路:
每个文字精灵会用到两个canvas,A保存文字(下次draw的时候直接ctx.drawImage()),B生成A的过程中间用。
首先格式化文字,得到一个下面的数组:
[{
    char: '作'
}, {
    char: '为'
}, {
    char: '公'
}, {
    char: '司'
}, {
    char: '老',
    color: '#F00',
    weight: 'bold',
    size: 16,
    font: '隶书'
}, {
    char: '板',
    color: '#F00',
    weight: 'bold',
    size: 16,
    font: '隶书'
}, {
    // ...
}]

然后画在B上,再getImageData,存在数组里面;
最后一步是实现css样式的关键,根据各样式值,把这些字(当图片)画在A上,然后文字精灵画的时候,只需调用ctx.drawImage(A, ...)就可以了。
为什么我们一直追求文字图片化呢?性能更高吗?请参考这个链接www.dzone.com/links/r/html5_canvas_drawtext_considered_harmful.html

希望有招一日,浏览器能从底层支持;
希望对你有帮助!
  • 大小: 10.7 KB
分享到:
评论

相关推荐

    react封装canvas进度条组件,可自定义宽高、颜色、字体等样式

    本文将深入探讨如何使用Canvas来封装一个React组件,实现一个可自定义宽高、颜色和字体样式的进度条。 首先,让我们理解Canvas的基本概念。HTML5的Canvas是一个基于矢量图形的画布,允许开发者通过JavaScript进行...

    微信小程序canvas实现文字缩放

    在微信小程序中,canvas元素是用于图形绘制的重要组件,它提供了丰富的API,使得开发者能够进行动态的、交互式的图形操作,包括文字的绘制和缩放。这篇内容将深入讲解如何在微信小程序的canvas环境中实现文字的缩放...

    画布开发Canvas(二).pdf

    在 Canvas 组件中,可以使用 `setFont()` 方法设置字体 formato,例如,`Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE)`。字体设置将影响字符串的显示样式和大小。 字符串绘制 使用 `...

    Delphi Canvas方法在图片上写入文字.rar

    在Delphi编程环境中,Canvas对象是用于图形绘制的核心组件,特别是在处理位图、画布和其他图形表面时。这个“Delphi Canvas方法在图片上写入文字.rar”压缩包可能包含了如何利用Canvas对象在图片上添加文本的示例...

    tkinter的canvas基本用法.docx

    - `canvas = tk.Canvas(window, bg='blue', width=500, height=400)`:在窗口 `window` 中创建一个 `Canvas` 组件,指定其背景颜色为蓝色,宽度为 500 像素,高度为 400 像素。 - `canvas.pack()`:将 `Canvas` ...

    HTML5 canvas绘制流程图

    接下来,我们要实现流程图的各个组件。首先是形状的绘制。canvas提供了一系列方法,如`fillRect()`(矩形)、`arc()`(圆形或弧形)等,用于在画布上绘制图形。以矩形为例: ```javascript context.fillStyle = '...

    基于QT的Qml Canvas文本显示

    在本文中,我们将深入探讨如何在Qt框架下利用Qml Canvas进行文本显示。Qt是一个强大的跨平台应用程序开发框架,而Qml是Qt提供的一种...在实际项目中,可以根据需求结合Qml的其他组件和功能,实现更加丰富的交互体验。

    BCB Canvas

    在Borland C++ Builder中,`BCB Canvas`是核心的绘图概念,它涉及到多个具有绘图能力的组件,如Form、Image、BitMap和PaintBox等。这些组件中的Canvas属性允许程序员进行图形绘制、文字输出以及颜色填充等操作。 ...

    QmlCanvas文字QmlCanvasText.7z

    在IT行业中,QmlCanvas是Qt Quick框架下用于在2D画布上绘制自定义图形的一个组件。这个组件提供了一种灵活的方式来动态地创建和控制视觉元素,而QmlCanvasText则是QmlCanvas中用于在画布上绘制文本的特定功能。这个...

    微信小程序画布canvas

    微信小程序中的画布组件`canvas`是开发过程中用于动态绘图的重要工具,它允许开发者在小程序界面中绘制图形、文字、图像等元素,为用户提供丰富的交互体验。在本篇文章中,我们将深入探讨`canvas`的相关知识点,包括...

    Clean canvas bootstrap 模板

    Font Awesome等图标库也可能集成在内,提供矢量图标。 6. **字体文件**:如果模板使用了自定义字体,这里会有相应的Web字体文件,如`.eot`, `.ttf`, `.woff`, `.woff2`。 7. **示例数据**:可能包含JSON或XML文件...

    分享功能,canvas绘制微信小程序分享海报

    本文将详细讲解如何利用canvas组件和微信小程序的分享功能来实现这一目标。 首先,我们要理解`open-type="share"`这个属性。在微信小程序中,按钮组件(button)可以通过设置`open-type`属性来实现不同的功能,其中...

    微信小程序canvas画布绘制矩形、椭(圆)、直线、文字

    在微信小程序中,Canvas是一个非常重要的组件,它允许开发者在界面上进行动态图形绘制,创造出丰富的视觉效果。本文将深入探讨如何使用Canvas API在微信小程序中绘制矩形、椭圆、直线以及添加文字。 首先,我们需要...

    Disc用Canvas来绘制个性化的仪表盘

    最后,如果项目是基于框架如React、Vue或Angular构建的,我们需要确保在生命周期方法中更新Canvas,以反映组件状态的变化。 在"Disc-master"这个压缩包文件中,可能包含了示例代码、样式文件以及可能的资源图片,供...

    BMFont工具 (unity使用BMFont制作位图字体)

    1. **创建UI Text**:在Unity编辑器中,创建一个新的UI Canvas,然后添加一个Text组件。 2. **导入BMFont**:在Text组件的“Font Data”下选择“None”,然后在Inspector窗口的资源浏览器中找到刚刚导入的.fnt文件,...

    ASPJPEG是一款功能相当强大的图象处理组件

    Jpeg.Canvas.Font.Color = &HFF0000 ' 设置字体家族 Jpeg.Canvas.Font.Family = "" ' 设置字体加粗 Jpeg.Canvas.Font.Bold = True ' 在指定位置打印文本 Jpeg.Canvas.Print 10, 10, "Copyright(c)Cnmaya....

    canvas-marquee:一个画布选取框组件

    基于画布的选取框组件 安装 npm i canvas-marquee -S 用法 import Marquee from 'canvas-marquee' ; var textList = [ '跑马灯' , '666' , '233333333' , 'javascript' , 'html' , 'css' , '前端框架' , 'Vue' , '...

    微信小程序之Canvas.zip

    4. 文本渲染:使用fillText()和strokeText()方法可以在Canvas上添加文本,并通过font、textAlign和textBaseline属性调整样式和位置。 5. 清除画布:clearRect()方法可用于清除指定区域的内容,恢复到初始透明状态。 ...

    canvas环形倒计时组件的示例代码

    本文将深入探讨如何利用Canvas实现一个环形倒计时组件,并提供详细的示例代码。 首先,环形倒计时组件通常用于展示时间剩余的情况,比如倒计时到某个事件的发生。在移动端应用中,这种组件可以增加用户交互性,提供...

Global site tag (gtag.js) - Google Analytics