首页 > 其他分享 >学习canvas(一些常用api)

学习canvas(一些常用api)

时间:2024-07-08 16:41:32浏览次数:12  
标签:150 canvas const 10 ctx 常用 50 api 100

当然,以下是这些常用Canvas API的总结,按照Markdown格式编写:

常用Canvas API总结

1. 获取绘图上下文

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d'); // 或 'webgl'

2. 绘制矩形

ctx.fillStyle = 'blue';
ctx.fillRect(10, 10, 150, 100); // 填充矩形

ctx.strokeStyle = 'red';
ctx.strokeRect(20, 20, 150, 100); // 描边矩形

ctx.clearRect(30, 30, 50, 50); // 清除矩形区域

3. 绘制路径

ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(200, 50);
ctx.lineTo(200, 200);
ctx.closePath();
ctx.stroke();

ctx.beginPath();
ctx.arc(150, 150, 75, 0, Math.PI * 2, true);
ctx.fill();

4. 绘制文本

ctx.font = '30px Arial';
ctx.fillStyle = 'black';
ctx.fillText('Hello Canvas', 50, 50);

ctx.strokeStyle = 'blue';
ctx.strokeText('Hello Canvas', 50, 100);

5. 绘制图像

const img = new Image();
img.onload = function() {
    ctx.drawImage(img, 10, 10, 100, 100); // 绘制图像
}
img.src = 'path/to/image.jpg';

6. 坐标变换

ctx.translate(50, 50); // 平移
ctx.rotate(Math.PI / 4); // 旋转
ctx.scale(2, 2); // 缩放

ctx.fillRect(0, 0, 100, 100);

7. 渐变

const gradient = ctx.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'blue');

ctx.fillStyle = gradient;
ctx.fillRect(10, 10, 200, 100);

8. 阴影

ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 5;
ctx.shadowOffsetY = 5;

ctx.fillStyle = 'red';
ctx.fillRect(50, 50, 100, 100);

9. 导出Canvas内容

const dataURL = canvas.toDataURL('image/png');
const button = document.getElementById('saveButton');
button.addEventListener('click', () => {
    canvas.toBlob((blob) => {
        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = 'canvas_image.png';
        link.click();
        URL.revokeObjectURL(link.href);
    }, 'image/png');
});

10. 测量文本

ctx.font = '30px Arial';
const metrics = ctx.measureText('Hello Canvas');
console.log(`Text width: ${metrics.width}px`);

11. 创建图案

const img = new Image();
img.onload = function() {
    const pattern = ctx.createPattern(img, 'repeat');
    ctx.fillStyle = pattern;
    ctx.fillRect(0, 0, 500, 500);
}
img.src = 'path/to/pattern.jpg';

12. 虚线

ctx.setLineDash([5, 15]);  // 虚线样式 [线条长度, 间隙长度]
ctx.lineDashOffset = 10;   // 虚线的偏移量
ctx.strokeRect(50, 50, 200, 200);

13. 剪切区域

ctx.beginPath();
ctx.arc(100, 100, 75, 0, Math.PI * 2, true);
ctx.clip();

ctx.fillStyle = 'green';
ctx.fillRect(0, 0, 200, 200);  // 只有在圆形区域内的部分会被绘制

14. 检测点是否在路径或描边内

ctx.beginPath();
ctx.rect(50, 50, 100, 100);
ctx.stroke();

console.log(ctx.isPointInPath(75, 75));  // true
console.log(ctx.isPointInStroke(75, 75)); // false

15. 设置全局透明度

ctx.globalAlpha = 0.5;
ctx.fillStyle = 'blue';
ctx.fillRect(50, 50, 100, 100);

16. 设置组合操作

ctx.globalCompositeOperation = 'destination-over';  // 绘制在已有内容下面
ctx.fillStyle = 'yellow';
ctx.fillRect(100, 100, 100, 100);

17. 绘制焦点环

const button = document.createElement('button');
document.body.appendChild(button);
button.focus();
ctx.drawFocusIfNeeded(button);

18. 读取和写入像素数据

const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
for (let i = 0; i < imageData.data.length; i += 4) {
    imageData.data[i] = 255 - imageData.data[i];     // 反转红色
    imageData.data[i+1] = 255 - imageData.data[i+1]; // 反转绿色
    imageData.data[i+2] = 255 - imageData.data[i+2]; // 反转蓝色
}
ctx.putImageData(imageData, 0, 0);

19. 创建空白ImageData对象

const newImageData = ctx.createImageData(100, 100);
for (let i = 0; i < newImageData.data.length; i += 4) {
    newImageData.data[i] = 255;  // Red
    newImageData.data[i+1] = 0;  // Green
    newImageData.data[i+2] = 0;  // Blue
    newImageData.data[i+3] = 255; // Alpha
}
ctx.putImageData(newImageData, 50, 50);

20. 保存和恢复Canvas状态

ctx.save();  // 保存当前状态

ctx.fillStyle = 'blue';
ctx.fillRect(10, 10, 100, 100);

ctx.restore();  // 恢复到保存时的状态
ctx.fillRect(150, 10, 100, 100); // 这个矩形将会使用之前的状态

21. 线条末端和连接处样式

ctx.lineWidth = 10;

ctx.lineCap = 'round';  // 设置线条末端样式:butt, round, square
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.stroke();

ctx.lineJoin = 'bevel';  // 设置线条连接处样式:bevel, round, miter
ctx.beginPath();
ctx.moveTo(50, 150);
ctx.lineTo(150, 150);
ctx.lineTo(100, 200);
ctx.stroke();

22. 绘制圆弧连接的直线

ctx.beginPath();
ctx.moveTo(50, 50);
ctx.arcTo(150, 50, 150, 150, 50); // 从(50,50)到(150,50),再到(150,150),圆弧半径为50
ctx.stroke();

23. 绘制贝塞尔曲线

ctx.beginPath();
ctx.moveTo(50, 250);
ctx.quadraticCurveTo(150, 200, 250, 250); // 二次贝塞尔曲线,控制点为(150,200),终点为(250,250)
ctx.stroke();

ctx.beginPath();
ctx.moveTo(50, 350);
ctx.bezierCurveTo(150, 300, 250, 400, 350, 350); // 三次贝塞尔曲线,控制点为(150,300)和(250,400),终点为(350,350)
ctx.stroke();

这些API涵盖了Canvas在绘图、动画、图像处理、路径操作等方面的广泛应用。在企业级应用中,熟练掌握和灵活运用这些API可以大大提高图形处理和用户界面设计的效率和质量。

标签:150,canvas,const,10,ctx,常用,50,api,100
From: https://www.cnblogs.com/HugoKwong/p/18290273

相关文章

  • 学习canvas(初步入门)
    canvas一些基础api用法首先需要创建一个canvas<canvasid="canvas"></canvas>然后获取到这个元素,可以用Document.getElementById('canvas')constcanvas=document.getElementById("canvas");然后拿到他的上下文对象ctx(然后可以在上下文的位置绘制内容)constcan......
  • MYSQL常用SQL语句
    数据库概述1、什么是数据库管理系统?数据管理系统是一种在数据库中组织和存储数据的软件应用程序。常见的数据库管理系统分为两大类:关系型数据管理系统和非关系型管理系统关系型数据库:MySQL、Oracle、SQLServer、Access非关系型数据库:MongoDB2、什么是数据库?数据库(Databas......
  • 常用 Docker 命令和配置指南 新手几乎够用 老手持续更新
    容器管理命令查看容器:查看所有已启动/未启动的容器:dockerps-a查看所有已启动的容器:dockerps启动和停止容器:启动容器:dockerstart容器ID停止容器:dockerstop容器ID重启容器:dockerrestart容器ID删除容器:删除容器:dockerrm容器ID镜像管理命令......
  • 通过高德地图 JS API实现 鼠标绘制多边形
    效果图:  核心代码:<template><a-modaltitle="选择地图所在位置":width="width":visible="visible"@ok="handleOk"@cancel="handleCancel"cancelText="关闭"><divclass="location-map-box&......
  • CMD常用操作
    在Windows中用命令行的方式操作计算机,允许用户管理文件(创建文件夹,打开文件,打开文件等)一.打开CMDwin+R键输入CMD默认操作C盘下的Users\电脑名文件夹二.常见的CMD操作命令1‘盘符名称’+‘:’可以切换盘例如D:再按回车键,表示切换到D盘2dir可以查看当前路径下的所有内......
  • 免费的壁纸API
    最近在给EasyDesktop增加背景的功能,考虑自己在服务器上部署壁纸,维护成本比较高,就找了几个免费的壁纸接口,体验还不错,这里简单记录一下.1.Bing壁纸API地址是:https://peapix.com/api使用起来比较简单,直接用fetch方法即可回去当日的bing壁纸列表,返回结构如下:[{......
  • 【学习笔记】网络设备(华为交换机)基础知识2——常用设备管理命令
    一、前期准备提示:下面所有学习内容都是基于以下条件完成的条件1.已经可以正常访问交换机的命令行接口Console口本地访问教程参考①:使用第三方工具(secureCRT软件)通过console口本地访问访问交换机的详细操作过程Telnet访问、通过SSH访问教程参考②:使用命令提示符和......
  • vue3管理系统常用代码总结
    管理系统常用基本模块,可满足大部分管理系统的基础模块需求。技术选型vue3+typescript1.登录功能//登录construleFormRef=ref<FormInstance>();constrouter=useRouter()//-->$routerconstsubmitForm=(formEl:FormInstance|undefi......
  • 使用Canvas封装图片压缩功能
    最近在学习和工作中遇到这样一个场景:如何将前端上传的图片进行压缩传递给服务端?因为此前从未了解过图片压缩的功能,所以也是带着好奇进行了一番学习,那么我的解决思路如下展示整体思路创建input框实现图片上传将上传的文件转成base64格式前端通过base64进行原始图片展示,并将此......
  • canvas—元素样式设置
    一、色彩:fillStyle=colorstrokeStyle=color二、透明度: 三、线型:设置线条宽度:lineWidth=value设置线条末端样式:lineCap=type设定线条与线条间接合处的样式:lineJoin=type限制当两条线相交时交接处最大长度:miterLimit=value ......