zoukankan      html  css  js  c++  java
  • Javascript高级编程学习笔记(94)—— Canvas(11) 合成

    合成

    除了之前介绍的属性之外,还有两个属性会应用到整个2d上下文中;

    • globalAlpha 用于指定所有绘制的透明度
    • globalComposition 用于表示后绘制的图形怎样与先绘制的图形进行结合
      • 该属性的值是字符串,可能的值如下
        • source-over(默认)   后绘制的图形位于先绘制的图形的上方
        • source-in    后绘制的图形与先绘制的图形重叠部分可见,其它部分透明
        • source-out    后绘制的图形与先绘制的图形不重叠部分可见,先绘制的图形完全透明
        • source-atop    后绘制的图形与先绘制的图形重叠部分可见,先绘制的图形不受影响
        • destination-over   后绘制的图形位于先绘制图形的下方,只有之前透明的部分可见
        • destination-in   后绘制的图形位于先绘制图形的下方,两者不重叠部分完全透明
        • destination-out     后绘制的图形擦除与先绘制图形的重叠部分
        • destination-atop   后绘制的图形位于先绘制图形的下方,在两者不重叠的地方,先绘制的图形会透明
        • lighter    后绘制的图形与先绘制的图形重叠部分的值相加,使该部分的值变亮
        • copy     后绘制的图形完全替代与之重叠的先绘制图形
        • xor        后绘制图形与先绘制图形的重叠部分执行异或操作

    示例如下:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Canvas合成</title>
        <meta name="Description" content=""/>
        <meta name="Author" content="lhy"/>
        <style>
            body{
               background-color: #75727c;
            }
        </style>
    </head>
    <body>
    
    
    <canvas id="canvas" width="800px" height="400px" style="margin: 200px 200px"></canvas>
    
    <script>
        
        let canvas = document.getElementById('canvas');
        let context = canvas.getContext('2d');
      
          // 绘制红色矩形
        context.fillStyle = "#ff0000";
        context.fillRect(10,10,50,50);
    
        // 绘制半透明蓝色矩形
        context.fillStyle = 'rgba(0,0,255,0.5)';
        context.fillRect (30,30,50,50);
    </script>
    </body>
    </html>

    基础效果如下:

    source-in:

    source-out:

     source-atop:

     

    destination-over:

    destination-in:

    destination-out:

    destination-atop:

    lighter:

    copy:

    xor:

    PS.以上测试结果为谷歌浏览器,不同浏览器的实现可能存在差异    

  • 相关阅读:
    53. Maximum Subarray
    Search Insert Position
    Single Number II
    260. Single Number III
    136. Single Number
    338. Counting Bits
    axios实现拦截器
    Vuex入门(5)—— 为什么要用Action管理异步操作
    ES6语法(3)—— 用promise()对象优雅的解决异步操作
    Vuex之理解Getters的用法
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10575998.html
Copyright © 2011-2022 走看看