首页 前端知识 HTML5(六)——Canvas 高级操作

HTML5(六)——Canvas 高级操作

2024-05-09 10:05:19 前端知识 前端哥 478 1000 我要收藏

运行结果如图:

HTML5(六)——Canvas 高级操作

1.3 、rotate - 旋转

使用语法:rotate(angle)

angle 旋转弧度,如果想使用角度,可以把角度转成弧度,公式为:deg * Path.PI/180。

eg:将一个矩形旋转45度,代码如下:

var canvas = document.getElementById(“canvas”)

var ctx = canvas.getContext(“2d”)

//旋转45度

ctx.rotate(45*Math.PI/180)

ctx.fillStyle=“red”

ctx.fillRect(0,0,200,200)

运行结果如图:

HTML5(六)——Canvas 高级操作

根据上述结果我们发现旋转的时候,默认原点是画布的起始点,我们想要的旋转是在矩形框中心为原点的旋转,此时我们需要借助上translate平移,重置一下原点,修改上述代码为:

var canvas = document.getElementById(“canvas”)

var ctx = canvas.getContext(“2d”)

ctx.translate(200,200)

ctx.rotate(45*Math.PI/180)

ctx.translate(-200,-200)

ctx.fillStyle=“red”

ctx.fillRect(100,100,200,200)

运行结果如图:

HTML5(六)——Canvas 高级操作

1.4、transform - 矩阵变换

使用语法:transform(a,b,c,d,e,f)

  • a:水平缩放

  • b:水平倾斜

  • c:垂直倾斜

  • d:垂直缩放

  • e:水平移动

  • f:垂直移动

transform可以替代前边平移、缩放、旋转三者,如下:

// 平移

translate(x,y) <=> transform(1,0,0,1,x,y) <=> transform(0,1,1,0,x,y)

// 缩放

sacle(x,y) <=> transform(x,0,0,y,0,0)

// 旋转

rotate(angle) <=> transform(Math.cos(angleMath.PI/180), Math.sin(angelMath.PI/180), -Math.sin(angleMath.PI/180), Math.cos(angleMath.PI/180))

1.5、setTransform - 矩阵变换

setTransform()方法将变换的矩阵进行重置,它把当前的变换矩阵重置为单位矩阵

使用语法:transform(a,b,c,d,e,f)

各参数说明:水平旋转、水平倾斜、垂直倾斜、垂直缩放、水平移动、垂直移动

setTransform() 方法把当前的变换矩阵重置为单位矩阵,然后以相同的参数运行 transform()。

二、canvas 操作图片

=============

drawImage() 在画布上绘制图像、画布或视频。也能够绘制图片的一部分,增加或减少图像的尺寸。以下是三种常见使用语法:

  • 语法1:drawImage( img , x , y )

  • 语法2:drawImage( img , x , y , width , height )

  • 语法3:drawImage( img , sx , sy , swidth, sheight , x , y , width , height )

上述参数表示的意义如下:

参数

描述

img

规定要使用的图像、画布或视频。

sx

可选。开始剪切的 x 坐标位置。

sy

可选。开始剪切的 y 坐标位置。

swidth

可选。被剪切图像的宽度。

sheight

可选。被剪切图像的高度。

x

在画布上放置图像的 x 坐标位置。

y

在画布上放置图像的 y 坐标位置。

width

可选。要使用的图像的宽度。(伸展或缩小图像)

height

可选。要使用的图像的高度。(伸展或缩小图像)

eg:利用语法3,进行绘制图片的部分内容,实现如下效果:

HTML5(六)——Canvas 高级操作

给上述兔子顺便加一个点击屏幕暂停开始功能,完整代码如下:

eg:使用 canvas 画布处理视频,使用定时器绘制视频的当前帧,连续起来就是一个视频,需要注意的是必须处理暂停和开始播放两种操作,具体代码如下:

var v=document.getElementById(“video1”);

var c=document.getElementById(“myCanvas”);

ctx=c.getContext(‘2d’);

v.addEventListener(‘play’,function() {var i=window.setInterval(function()

{ctx.drawImage(v,0,0,270,135)},20);},false);

v.addEventListener(‘pause’,function() {window.clearInterval(i);},false);

v.addEventListener(‘ended’,function() {clearInterval(i);},false);

三、像素级操作

=======

常见的像素级的操作有三种:

  • getImageData() - 获取画布像素数据

  • createImageData() - 创建新的、空白像素

  • putImageData() - 图像像素数据放回画布

3.1、getImageData

使用语法:getImageData( x , y , width , height )

  • x:要被提取的图像数据矩形区域的左上角 x 坐标。

  • y:要被提取的图像数据矩形区域的左上角 y 坐标。

  • width:被提取的图像数据矩形区域的宽度

  • height:被提取的图像数据矩形区域的高度

返回一个 imageData 对象,用来描述 canvas 区域隐含的像素数据,这个区域通过像素表示,起点是( x , y ),宽高为 widht 和 height 。

imageData 对象包含三个属性:

  • imageData.height - 像素描述的矩形实际高度。

  • imageData.width - 像素描述的矩形实际宽度。

  • imageData.data - 包含 rgba 顺序数据的一个数组,数据使用0-255直接整数表示。

3.2、createImageData

使用语法:

createImageData( width , height )

创建一个空白的 imageData 对象,新对象的默认像素值 transparent black。对于imageData对象中的每个像素值,都存在 rgba 这四方面的信息,即:

  • r - 红色(0-255)

  • g - 绿色(0-255)

  • b - 蓝色(0-255)

  • a - alpha(0-255,0是透明,255是完全可见)

新对象默认像素值为(0,0,0,0)。

eg:如果我们想把 imageData 中一个像素变为红色时,可以改变第一和第四位信息,代码如下:

var imageData = ctx.createImageData(100,100)

imageData.data[0] = 255

imageData.data[1] = 0

imageData.data[2] = 0

imageData.data[3] = 255

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

数据结构与算法

这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

一下冒泡快排的原理

  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

[外链图片转存中…(img-jGugg1AN-1712829143608)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-4D0WH3n9-1712829143608)]

转载请注明出处或者链接地址:https://www.qianduange.cn//article/7646.html
标签
评论
发布的文章

jQuery初学

2024-05-29 10:05:14

Jquery中$,web开发语言

2024-05-29 10:05:25

jQuery 实现小球撞击动画

2024-05-29 10:05:04

echarts 横向柱状图

2024-05-29 10:05:01

Echarts:读取动态数据

2024-05-29 10:05:53

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!