Skip to content

7.2 图形绘制

关键词: Canvas图形绘制, 矩形绘制, 圆形绘制, 线条路径, 贝塞尔曲线, 复杂图形, 基本图形, 图形组合

学习目标

  • 理解Canvas中基本图形绘制的HTML基础
  • 掌握不同类型图形绘制所需的Canvas元素配置
  • 学会为图形绘制准备合适的Canvas HTML结构
  • 理解各种图形绘制的Canvas元素属性设置
  • 掌握复杂图形组合的Canvas容器配置

7.2.1 矩形绘制基础

矩形绘制的Canvas配置

矩形是Canvas绘图中最基本的图形,需要合适的Canvas元素配置来支持矩形绘制:

html
<!-- 用于矩形绘制的Canvas -->
<canvas id="rectangleCanvas" width="400" height="300">
    <p>矩形绘制区域</p>
    <p>支持绘制填充矩形和描边矩形</p>
</canvas>

矩形绘制的HTML结构

为不同类型的矩形绘制准备相应的Canvas元素:

html
<!-- 填充矩形绘制 -->
<canvas id="filledRect" width="300" height="200" data-shape="rectangle" data-type="filled">
    填充矩形绘制画布
</canvas>

<!-- 描边矩形绘制 -->
<canvas id="strokeRect" width="300" height="200" data-shape="rectangle" data-type="stroke">
    描边矩形绘制画布
</canvas>

<!-- 清除矩形区域 -->
<canvas id="clearRect" width="300" height="200" data-shape="rectangle" data-type="clear">
    矩形区域清除画布
</canvas>

矩形绘制容器

为矩形绘制创建合适的容器结构:

html
<div class="rectangle-drawing-container">
    <h3>矩形绘制示例</h3>
    <canvas id="rectangleDemo" width="500" height="400">
        <div class="canvas-fallback">
            <p>您的浏览器不支持Canvas,无法显示矩形绘制效果。</p>
            <p>建议使用现代浏览器查看此内容。</p>
        </div>
    </canvas>
</div>

7.2.2 圆形和弧形绘制

圆形绘制的Canvas设置

圆形和弧形绘制需要特定的Canvas配置:

html
<!-- 圆形绘制专用Canvas -->
<canvas id="circleCanvas" width="400" height="400" data-shape="circle">
    <p>圆形绘制区域</p>
    <p>支持完整圆形和弧形绘制</p>
</canvas>

弧形绘制的HTML结构

为不同类型的弧形绘制准备Canvas元素:

html
<!-- 完整圆形 -->
<canvas id="fullCircle" width="250" height="250" data-shape="circle" data-type="full">
    完整圆形绘制
</canvas>

<!-- 半圆弧形 -->
<canvas id="halfCircle" width="250" height="150" data-shape="arc" data-type="half">
    半圆弧形绘制
</canvas>

<!-- 扇形 -->
<canvas id="sector" width="250" height="250" data-shape="sector">
    扇形绘制
</canvas>

圆形绘制示例容器

html
<div class="circle-drawing-section">
    <h3>圆形和弧形绘制</h3>
    <div class="circle-examples">
        <canvas id="circleDemo" width="300" height="300">
            <table>
                <caption>圆形绘制说明</caption>
                <tr><th>图形类型</th><th>特点</th></tr>
                <tr><td>完整圆形</td><td>360度闭合圆形</td></tr>
                <tr><td>弧形</td><td>部分圆形弧段</td></tr>
                <tr><td>扇形</td><td>带有半径的弧形</td></tr>
            </table>
        </canvas>
    </div>
</div>

7.2.3 线条和路径绘制

线条绘制的Canvas配置

线条是构成复杂图形的基础,需要合适的Canvas设置:

html
<!-- 线条绘制Canvas -->
<canvas id="lineCanvas" width="500" height="300" data-shape="line">
    <p>线条绘制区域</p>
    <p>支持直线、折线和曲线绘制</p>
</canvas>

不同类型线条的HTML结构

html
<!-- 直线绘制 -->
<canvas id="straightLine" width="300" height="200" data-line-type="straight">
    直线绘制
</canvas>

<!-- 折线绘制 -->
<canvas id="polyLine" width="300" height="200" data-line-type="polyline">
    折线绘制
</canvas>

<!-- 曲线绘制 -->
<canvas id="curveLine" width="300" height="200" data-line-type="curve">
    曲线绘制
</canvas>

路径绘制的Canvas结构

html
<!-- 复杂路径绘制 -->
<canvas id="pathCanvas" width="400" height="300" data-drawing="path">
    <div class="path-description">
        <h4>路径绘制说明</h4>
        <ul>
            <li>起始点:moveTo()</li>
            <li>直线:lineTo()</li>
            <li>曲线:bezierCurveTo()</li>
            <li>闭合:closePath()</li>
        </ul>
    </div>
</canvas>

7.2.4 贝塞尔曲线绘制

贝塞尔曲线的Canvas配置

贝塞尔曲线需要特殊的Canvas配置来支持控制点:

html
<!-- 贝塞尔曲线Canvas -->
<canvas id="bezierCanvas" width="500" height="400" data-curve="bezier">
    <p>贝塞尔曲线绘制区域</p>
    <p>支持二次和三次贝塞尔曲线</p>
</canvas>

不同类型贝塞尔曲线的HTML结构

html
<!-- 二次贝塞尔曲线 -->
<canvas id="quadraticBezier" width="350" height="250" data-bezier-type="quadratic">
    <div class="bezier-info">
        <h4>二次贝塞尔曲线</h4>
        <p>包含一个控制点</p>
    </div>
</canvas>

<!-- 三次贝塞尔曲线 -->
<canvas id="cubicBezier" width="350" height="250" data-bezier-type="cubic">
    <div class="bezier-info">
        <h4>三次贝塞尔曲线</h4>
        <p>包含两个控制点</p>
    </div>
</canvas>

贝塞尔曲线绘制示例

html
<div class="bezier-drawing-container">
    <h3>贝塞尔曲线绘制示例</h3>
    <canvas id="bezierDemo" width="600" height="400">
        <div class="bezier-fallback">
            <h4>贝塞尔曲线类型</h4>
            <dl>
                <dt>二次贝塞尔曲线</dt>
                <dd>使用一个控制点来定义曲线的弯曲程度</dd>
                <dt>三次贝塞尔曲线</dt>
                <dd>使用两个控制点来创建更复杂的曲线</dd>
            </dl>
        </div>
    </canvas>
</div>

7.2.5 复杂图形组合

复杂图形的Canvas配置

复杂图形需要更大的Canvas空间和特殊配置:

html
<!-- 复杂图形绘制Canvas -->
<canvas id="complexGraphics" width="800" height="600" data-complexity="high">
    <p>复杂图形绘制区域</p>
    <p>支持多种基本图形的组合绘制</p>
</canvas>

图形组合的HTML结构

html
<!-- 几何图形组合 -->
<canvas id="geometryCombo" width="500" height="400" data-combo="geometry">
    <div class="geometry-description">
        <h4>几何图形组合</h4>
        <p>包含矩形、圆形、三角形等基本几何图形</p>
    </div>
</canvas>

<!-- 装饰图案组合 -->
<canvas id="decorativePattern" width="500" height="400" data-combo="decorative">
    <div class="pattern-description">
        <h4>装饰图案组合</h4>
        <p>通过基本图形组合创建装饰性图案</p>
    </div>
</canvas>

复杂图形展示容器

html
<div class="complex-graphics-showcase">
    <h3>复杂图形组合展示</h3>
    <div class="graphics-grid">
        <div class="graphics-item">
            <canvas id="logo" width="200" height="200" data-type="logo">
                <p>Logo图形</p>
            </canvas>
        </div>
        <div class="graphics-item">
            <canvas id="chart" width="200" height="200" data-type="chart">
                <p>图表图形</p>
            </canvas>
        </div>
        <div class="graphics-item">
            <canvas id="illustration" width="200" height="200" data-type="illustration">
                <p>插图图形</p>
            </canvas>
        </div>
    </div>
</div>

7.2.6 图形绘制的可访问性

为图形绘制添加可访问性

图形绘制的Canvas应该包含适当的可访问性信息:

html
<!-- 带有可访问性的图形Canvas -->
<canvas id="accessibleGraphics" width="400" height="300" 
        role="img" aria-label="几何图形绘制示例">
    <div class="graphics-description">
        <h4>图形内容描述</h4>
        <p>画布中包含以下图形:</p>
        <ul>
            <li>蓝色矩形位于左上角</li>
            <li>红色圆形位于右上角</li>
            <li>绿色三角形位于底部中央</li>
        </ul>
    </div>
</canvas>

图形绘制的详细描述

html
<!-- 带有详细描述的图形Canvas -->
<canvas id="detailedGraphics" width="500" height="400" 
        aria-describedby="graphics-detail">
    <div id="graphics-detail" class="graphics-accessibility">
        <h4>详细图形描述</h4>
        <table>
            <caption>画布中的图形元素</caption>
            <thead>
                <tr><th>图形类型</th><th>颜色</th><th>位置</th><th>大小</th></tr>
            </thead>
            <tbody>
                <tr><td>矩形</td><td>蓝色</td><td>左上角</td><td>100x80像素</td></tr>
                <tr><td>圆形</td><td>红色</td><td>右上角</td><td>半径50像素</td></tr>
                <tr><td>三角形</td><td>绿色</td><td>底部中央</td><td>边长60像素</td></tr>
            </tbody>
        </table>
    </div>
</canvas>

本节要点回顾

  • 矩形绘制:Canvas支持填充矩形、描边矩形和清除矩形区域
  • 圆形和弧形:可以绘制完整圆形、弧形和扇形
  • 线条和路径:支持直线、折线、曲线和复杂路径绘制
  • 贝塞尔曲线:包括二次和三次贝塞尔曲线
  • 复杂图形组合:通过基本图形组合创建复杂的图形效果

相关学习资源

常见问题FAQ

Q: Canvas中绘制的图形是矢量图还是位图?

A: Canvas绘制的图形是位图(栅格图像),不是矢量图。这意味着放大时可能会出现锯齿或模糊。

Q: 如何在Canvas中绘制复杂的图形?

A: 复杂图形通常通过组合基本图形来实现,使用路径、贝塞尔曲线等技术可以创建更复杂的形状。

Q: Canvas中的坐标系统对图形绘制有什么影响?

A: Canvas使用左上角为原点的坐标系统,所有图形的位置都相对于这个坐标系统。理解坐标系统对准确绘制图形很重要。

Q: 如何让Canvas中的图形具有更好的可访问性?

A: 应该在Canvas元素中提供详细的文字描述,使用适当的ARIA属性,为视觉障碍用户提供图形内容的文字说明。

Q: Canvas绘制的图形可以像SVG一样进行交互吗?

A: Canvas绘制的图形本身不能像SVG元素那样直接交互,但可以通过监听Canvas元素的鼠标事件来实现交互效果。


下一节预览:下一节我们将学习第7章第3节-Canvas样式和效果,重点介绍如何为Canvas绘制的图形添加颜色、渐变、阴影等视觉效果。