canvas图像阴影处理

简介: canvas图像阴影处理

一、图像重叠

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<!--<canvas id="myCanvas"></canvas>-->
<script>
    let gco = new Array();
    //目标图像顶部显示源图像
    gco.push("source-atop");
    //目标图像内部显示源图像
    gco.push("source-in");
    //目标图像之外显示源图像
    gco.push("source-out");
    //目标图像上显示源图像
    gco.push("source-over");
    //源图像顶部显示目标图像
    gco.push("destination-atop");
    //源图像内部显示目标图像
    gco.push("destination-in");
    //源图像外部显示目标图像
    gco.push("destination-out");
    //源图像上显示目标图像
    gco.push("destination-over");
    //显示源图像+目标图像
    gco.push("lighter");
    //显示源图像,忽略目标图像
    gco.push("copy");
    //使用异或,操作源图像与目标图像组合
    gco.push("xor");
    for (var n = 0; n < gco.length; n++) {
        document.write("<div id='p_" + n + "' style='float:left;'>" + gco[n] + ":<br>");
        var c = document.createElement("canvas");
        c.width = 120;
        c.height = 100;
        document.getElementById("p_" + n).appendChild(c);
        var ctx = c.getContext("2d");
        ctx.fillStyle = "blue";
        //绘制蓝色矩形,目标图像
        ctx.fillRect(10, 10, 50, 50);
        //如何将源图像绘制到目标图像,源图像=打算绘制的图像,目标图像=已经存在图像
        ctx.globalCompositeOperation = gco[n];
        ctx.beginPath();
        ctx.fillStyle = "red";
        //绘制红色圆,源图像
        ctx.arc(50, 50, 30, 0, 2 * Math.PI);
        ctx.fill();
        document.write("</div>")
    }
</script>
</body>
 
</html>

二、图像阴影

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
</head>
<body>
<canvas id="myCanvas"></canvas>
</body>
<script>
<!--    获取元素-->
    var c=document.getElementById("myCanvas");
    //获取canvs上下文
    var ctx=c.getContext("2d");
    //设置阴影模糊级数
    ctx.shadowBlur=10;
    //设置X轴偏移量
    ctx.shadowOffsetX=20;
    //设置Y轴偏移量
    ctx.shadowOffsetY=16;
    //设置阴影颜色
    ctx.shadowColor="black";
    ctx.fillStyle="red";
    ctx.fillRect(20,20,100,80);
</script>
 
</html>

三、绘制五角星

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
</head>
<body onload="draw('myCanvas')">
<canvas id="myCanvas" width="500" height="500"></canvas>
</body>
<script>
 
 
    function draw(id) {
        var c = document.getElementById(id);
        //获取canvs上下文
        var ctx = c.getContext("2d");
        //设置填充颜色
        ctx.fillStyle = "#eeeeef";
        //绘制矩形
        ctx.fillRect(0, 0, 500, 500);
        //设置阴影偏移量
        ctx.shadowOffsetX = 20;
        ctx.shadowOffsetY = 10;
        //设置阴影颜色
        ctx.shadowColor = 'rgba(100,100,100,0.5)';
        //设置阴影模糊度
        ctx.shadowBlur = 3.5;
        //设置绘制偏移量
        ctx.translate(0, 50);
        for (var i = 0; i < 3; i++) {
            ctx.translate(100, 100);
            createStart(ctx);
            ctx.fill();
        }
        //绘制五角星
        function createStart(ctx) {
            var dx=100;
            var dy=0;
            var s=50;
            ctx.beginPath();
            ctx.fillStyle='rgba(255,0,0,0.5)';
            //将360度分为5等份
            var dig=4*Math.PI/5;
            for (var i = 0; i < 5; i++) {
                var x=Math.sin(i*dig);
                var y=Math.cos(i*dig);
                //绘制直线
                ctx.lineTo(dx+x*s,dy+y*s);
            }
            //100 50
            //40 129.38926261462365 -40.450849718747364
            //40 52.44717418524232 15.450849718747362
            //40 147.55282581475768 15.450849718747387
            //40 70.61073738537635 -40.450849718747385
            ctx.closePath();
        }
    }
 
</script>
 
</html>

相关文章
daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)
daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)
241 0
Axure设计之多级菜单导航教程(中继器)
在数字化时代,优化产品设计,提升用户界面交互,是产品设计着重考虑的点。针对传统菜单导航复杂繁琐的问题,本设计提出了一套灵活的菜单导航方案,结合中继器与动态面板,实现一键搜索、菜单收藏、多级菜单导航、点击展开收缩等交互功能,旨在提升领导满意度,增强产品设计体验。
852 2
|
存储 缓存 Kubernetes
Dubbo-kubernetes 基于 Informer 服务发现优化之路
优化为 Informer 后,Dubbo 的服务发现不用每次直接调用 kube-apiserver,减小了 kube-apiserver 的压力,也大大减少了响应时间,助力 Dubbo 从传统架构迁移到 Kubernetes 中。
398 68
Dubbo-kubernetes 基于 Informer 服务发现优化之路
|
机器学习/深度学习 自然语言处理 安全
探索机器学习在网络安全中的应用
本文旨在介绍机器学习技术如何增强现有的网络安全体系,通过具体案例分析展示其实际应用效果,并讨论面临的挑战与未来的发展方向。
274 0
|
人工智能 Kubernetes Cloud Native
阿里云容器服务 ACK 产品技术动态(202309)
简介: 容器服务 Kubernetes 版 ACK Feature:备份中心备份计划功能优化:控制台支持备份任务模糊搜索、根据创建时间排序及通过克隆快速生成立即备份和备份计划。
813 1
|
机器学习/深度学习 PyTorch 测试技术
SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation 论文解读
我们提出了SegNeXt,一种用于语义分割的简单卷积网络架构。最近的基于transformer的模型由于在编码空间信息时self-attention的效率而主导了语义分割领域。在本文中,我们证明卷积注意力是比transformer中的self-attention更有效的编码上下文信息的方法。
772 0
|
传感器 IDE JavaScript
AliOSThings 物联网开发入门|学习笔记
快速学习AliOSThings 物联网开发入门
AliOSThings 物联网开发入门|学习笔记
|
Web App开发 JavaScript 前端开发
画了20张图,详解浏览器渲染引擎工作原理(下)
今天我们来学习一下浏览器渲染引擎的工作原理,文章内容较多,建议先收藏再学习! 先来看看Chrome浏览器的架构图:
481 0
|
开发框架 API 区块链
介绍三种Blockchain环境
介绍三种Blockchain环境
252 0