首页 > 专栏 > 前端 > 文章详情
canvas 实例方法: save() 和 restore() 的理解 发布于:2023-03-12 21:14:02   来源:方帅   查看:119  讨论:0
<div>
    初学者会认为canvas中的save方法是用来保存绘图状态的图形,而restore方法是用来还原之前
    保存的绘图状态的,其实不然。
    <p>save(): 保存当前的绘图状态</p>
    <p>restore(): 恢复之前保存的绘图状态</p>
    <p>在canvas环境中,可以利用所谓的绘图堆栈状态。每个状态随时存储canvas上下文数据。</p>
    <ul>
        <li>当前的坐标变换(变换矩阵)信息,比如旋转或平移时使用的rotate()和setTransform()方法</li>
        <li>当前裁剪区域clip()</li>
        <li>当前的虚线列表</li>
        <li>图形上下文对象(CanvasRenderingContext2D)的当前属性值,包括:
            <ul>
                <li>fillStyle: 填充路径的当前的颜色、模式或渐变</li>
                <li>globalAlpha: 设置图形和图片透明度的属性</li>
                <li>globalCompositeOperation: 指定颜色如何与画布上已有颜色组合(合成)</li>
                <li>strokeStyle: 描述画笔(绘制图形)颜色或者样式的属性</li>
                <li>lineWidth: 设置线段的宽度</li>
                <li>lineCap: 如何绘制每一条线段末端的属性 ["butt" | "round" | "square"]</li>
                <li>lineJoin: 指定线段连接的绘制方式 ["bevel" | "round" | "miter"]</li>
                <li>miterLimit: 当lineJoin为miter时,这个属性指定斜连接长度和二分之一线宽的最大比率</li>
                <li>lineDashOffset: 设置虚线偏移量的属性,例如可以实现“蚂蚁线“的效果</li>
                <li>shadowOffsetX: 描述阴影水平偏移距离的属性</li>
                <li>shadowOffsetY: 描述阴影垂直偏移距离的属性</li>
                <li>shadowBlur: 描述模糊效果程度的属性;它既不对应像素值也不受当前转换矩阵的影响</li>
                <li>shadowColor: 阴影颜色</li>
                <li>font: 描述绘制文字时,当前字体样式的属性。使用和 CSS font 规范相同的字符串值</li>
                <li>textAlign: 描述绘制文本时,文本的对齐方式的属性 ["left" || "right" || "center" || "start" || "end"]</li>
                <li>textBaseLine: 描述绘制文本时,当前文本基线的属性 ["top" || "hanging" || "middle" || "alphabetic" || "ideographic" || "bottom"]</li>
                <li>direction: 在绘制文本时,描述当前文本方向的属性 ["ltr" || "rtl" || "inherit"]</li>
                <li>imageSmoothingEnable: 用来设置图片是否平滑的属性,true 表示图片平滑</li>
            </ul>
        </li>
    </ul>
</div>

在浏览器中预览:u8v易塔云建站-模板下载,web开发资源,技术博客
u8v易塔云建站-模板下载,web开发资源,技术博客
在Canvas中当前路径和当前位图受Canvas环境控制,不属于保存状态。这个重要的功能允许在画布上对单个对象进行绘画和制作动画。  u8v易塔云建站-模板下载,web开发资源,技术博客
如上所述用堆栈的原理来解释,就是调用save()方法时,将记录当前的绘图状态,并压入一个堆栈中;接着调用restore()方法时,就会把上一次记录的绘图状态从堆栈中弹出。
u8v易塔云建站-模板下载,web开发资源,技术博客

  需要注意的是,出栈的次数不能多于入栈的次数,故程序中restore()方法调用的次数不应该比save()方法多。u8v易塔云建站-模板下载,web开发资源,技术博客

  画张图来帮助理解:u8v易塔云建站-模板下载,web开发资源,技术博客
u8v易塔云建站-模板下载,web开发资源,技术博客
u8v易塔云建站-模板下载,web开发资源,技术博客
u8v易塔云建站-模板下载,web开发资源,技术博客
gitee地址:https://gitee.com/christxm/canvas/tree/master/Canvas%20APIu8v易塔云建站-模板下载,web开发资源,技术博客

评论

  • 匿名