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>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="200" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(5, 5, 25, 25);
    //缩放图形,宽度2倍,长度2倍
    ctx.scale(2, 2);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(5, 5, 25, 25)
</script>
</html>

红同矩形长宽各放大了两倍

二、旋转

<!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>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="200" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(50, 20, 100, 50)
    //按照弧度旋转45度,Math.PI/180表示一度(弧度转度)
    ctx.rotate(45*Math.PI/180);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(50, 20, 100, 50)
</script>
</html>

三、位移

<!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>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="210" height="200"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle="rgb(0,255,255)"
    ctx.strokeRect(50, 20, 70, 50)
    //将绘制图形(0,0)坐标位移(70,70)
    ctx.translate(70,70);
    ctx.strokeStyle="rgb(206,70,28)"
    ctx.strokeRect(50, 20, 70, 50)
</script>
</html>

四、缩放、倾斜、位移

<!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>canvas</title>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
</body>
<script>
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    ctx.fillStyle="yellow"
    ctx.fillRect(0,0,250,100)
    //水平绘制参数倍数1,水平倾斜30度,垂直绘制1倍,垂直倾斜1弧度,水平移动,垂直移动
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="red"
    ctx.fillRect(0,0,250,100)
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="blue"
    ctx.fillRect(0,0,250,100)
    ctx.transform(1,30*Math.PI/180,-0.5,1,30,10);
    ctx.fillStyle="pink"
    ctx.fillRect(0,0,250,100)
</script>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
</head>
<body onload="draw('canvas')">
<canvas id="canvas" width="300" height="400">
 
</canvas>
</body>
<script>
    function draw(id) {
        //获取元素
        var canvas = document.getElementById(id);
        if (canvas == null) {
            return false;
        }
        //获取canvas上下文
        var ctx = canvas.getContext('2d');
        //设置径向渐变颜色
        var g1 = ctx.createRadialGradient(400, 50, 50, 400, 50, 400);
        g1.addColorStop(0, 'rgb(255,255,0)');
        g1.addColorStop(0.3, 'rgb(255,0,255)');
        g1.addColorStop(1, 'rgb(0,255,255)');
        ctx.fillStyle = g1;
        ctx.fillRect(0, 0, 500, 500);
        //重新设置中心点
        ctx.translate(200, 50);
        ctx.fillStyle = "rgba(255,0,0,0.25)";
        for (var i = 0; i < 50; i++) {
            ctx.translate(25, 25);
            //设置缩放0.95
            ctx.scale(0.95, 0.95);
            //设置旋转18度
            ctx.rotate(18 * Math.PI / 180);
            ctx.fillRect(0, 0, 100, 50);
        }
    }
</script>
</html>

相关文章
|
JSON 监控 数据管理
【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据
Elasticsearch的ILM功能允许用户定义策略,自动管理索引从创建到删除的生命周期。用户可以设置策略,根据索引年龄或大小自动删除旧数据,节省存储空间。通过应用ILM策略于索引模板,新索引将遵循预定义的生命周期。用户还可以监控ILM状态,确保策略按预期执行。使用ILM,用户可以高效地管理数据,确保旧数据及时删除,同时保持数据完整性和安全性。
661 3
|
运维 测试技术 Linux
关于Stress 压力测试工具的介绍与使用
在日益复杂的计算环境中,保证系统的稳定性和性能成为了每个Linux管理员的核心任务。面对不断增长的数据量和业务需求,如何有效评估系统极限和潜在瓶颈? 压力测试工具:stress,成为了不可或缺的助手。这篇记录描述stress工具的使用方法及其在模拟真实负载中的实用性。
关于Stress 压力测试工具的介绍与使用
|
开发工具 git
Stylelint——Unexpected unknown pseudo-class selector ":deep" selector-pseudo-class-no-unknown
新项目制定规范接入了stylelint,并通过husky在git提交时去触发检测修复,使用`:deep()`的时候却发现了报错;
472 1
|
机器学习/深度学习 人工智能 自然语言处理
OpenAI 推出 GPT-4o,免费向所有人提供GPT-4级别的AI ,可以实时对音频、视觉和文本进行推理,附使用详细指南
GPT-4o不仅提供与GPT-4同等程度的模型能力,推理速度还更快,还能提供同时理解文本、图像、音频等内容的多模态能力,无论你是付费用户,还是免费用户,都能通过它体验GPT-4了
871 1
|
Kubernetes 网络协议 网络安全
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
|
前端开发 容器
css中弹性布局使用方法
css中弹性布局使用方法
220 0
|
监控 JavaScript 数据库
OpenLLMetry:完美支持 LLM 应用的开源监测工具
【2月更文挑战第16天】OpenLLMetry:完美支持 LLM 应用的开源监测工具
1150 1
OpenLLMetry:完美支持 LLM 应用的开源监测工具
|
小程序 JavaScript 开发者
微信小程序——事件监听
微信小程序——事件监听
660 0
|
JSON NoSQL Java
好用的idea插件
好用的idea插件
351 0