图片获取像素坐标html,HTML5画布Canvas图片抽取、像素信息获取、命中检测

5268f80b9b1e01f982625ef6fac83ca1.png

今天主要介绍canvas中比较强大的功能

比如将画布内容抽取为图片

获取、修改画布的像素信息

以及画布的命中检测

首先我仍然需要创建画布

图片抽取

首先要明确的一点是

toDataURL()是canvas对象自身的方法而不是环境对象的

这个方法会将canvas的内容抽取为一张图片(base64编码)

我们来看一下它的使用方法

canvas转化为图像

我闲着没事用canvas做了一个太极图

js代码如下let canvas = document.getElementById('myCanvas');

let cxt = canvas.getContext('2d');

let l = canvas.width/2;

const PI = Math.PI;

cxt.translate(l, l);let createTaiChi = () => {

cxt.clearRect(-l, -l, l, l);

cxt.arc(0, 0, l, 0, 2*PI, 0);

cxt.stroke();

cxt.beginPath();

cxt.arc(0, -l/2, l/2, -PI/2, PI/2, 0);

cxt.arc(0, l/2, l/2, 3/2*PI, PI/2, 1);

cxt.arc(0, 0, l, PI/2, PI*3/2, 0);

cxt.fill();

cxt.beginPath();

cxt.fillStyle = '#fff';

cxt.arc(0, -l/2, l/7, 0, PI*2, 0);

cxt.fill();

cxt.beginPath();

cxt.fillStyle = '#000';

cxt.arc(0, l/2, l/7, 0, PI*2, 0);

cxt.fill();

};

createTaiChi();

再配合css做成一个持续旋转的样子#myCanvas {

width: 250px;

height: 250px;

margin: 100px;

animation: rotate 3s linear infinite;

}@keyframes rotate{

0% {

transform: rotateZ(0);

}

100% {

transform: rotateZ(360deg); }}

注意这里我设置的css宽高要比canvas本来的宽高小一倍

(这样可以让canvas更清晰一些)

d7b43c77ba15220e462af324c4dd3a3b.gif

下面我就要将我在canvas画的太极图转化为一张图片

首先要获取canvas的base64编码let data = canvas.toDataURL();console.log(data);

这里我们在控制台打印一下看看它的样子

710964111b379ebd7e2cdeb1e414a8f7.png

我们要向将它变成图片,

只需要创建一个img标签,然后将src设置为data即可let img = document.createElement('img');

img.src = data;document.body.appendChild(img);

这时我们就会发现页面中多了一个静态的太极图

大小与canvas的width/height属性相同 500×500

同源策略限制

注意这个方法是受同源策略限制的

比如说我在页面中添加一个本地图片

然后将这张图片画到canvas中let img = document.getElementsByTagName('img')[0];

cxt.drawImage(img, 0, 0);let data = canvas.toDataURL();

浏览器会报错

29864ba638958d88ff89b64e60430f1c.png

我们使用本地服务器的话就可以使用这个方法

证明这个方法受同源策略限制

像素信息

使用getImageData(x, y, dx, dy)可以获取canvas的像素信息

方法由环境对象调用(我们这里是cxt)

(同样受同源策略限制)

前两个参数是要获取图像信息的起始坐标,后两个参数就是要获取图像信息的宽高

(类似于矩形绘制函数)

这个方法返回一个ImageData对象(包括像素信息数组data还有宽高width/height)

我们主要用这个对象的data属性

我们画布的大小是500×500

所以获取canvas上所有像素信息就是这样console.log(cxt.getImageData(0, 0, 500, 500).data);

f235f05990d3768f02069a961dc55da4.png

我们发现这个数组的长度为100w

377079c2cd422738cbc74a4d3335376d.png

假如我们的canvas有四个像素点

每个像素点信息有分为RGBA四个方面的值

那么数组长度就应该是4×4 = 16

它们分别是

1R 1G 1B 1A

2R 2G 2B 2A

3R 3G 3B 3A

4R 4G 4B 4A

我们这里的canvas一共有500×500 = 25w个像素点

所以像素信息数组大小为 25w×4 = 100w

我们还可以使用createImageData(width,height)方法

创建一个空白imageData对象let blankImg = cxt.createImageData(250, 250);

console.log(blankImg);

b080fd7a788bf995b8815ef5efbcf735.png

使用putImageData(imgData, x, y)可以将你的图像像素覆盖原canvas

imgData就是imgData对象,x,y是覆盖的起始坐标

比如说我将我们上面创建的250×250的空白图像覆盖原canvascxt.putImageData(blankImg, 0, 0);

94db17f5f994d2e6b86becb49eb33598.png

命中检测

isPointInPath()可以检测像素点是否在路径区域内

使用方法很简单cxt.rect(100, 100, 300, 300);if(cxt.isPointInPath(200, 200)){

cxt.stroke();}

isPointInStroke()用来检测像素点是否在路径上,用法也类似

不过它的兼容性不是很好

以上就是HTML5画布Canvas图片抽取、像素信息获取、命中检测的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS6 下Samba服务器的安装与配置

原地址:http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html 一、简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网…

傅里叶变换 直观_A / B测试的直观模拟

傅里叶变换 直观Many of us have heard, read, or even performed an A/B Test before, which means we have conducted a statistical test at some point. Most of the time, we have worked with data from first or third-party sources and performed these tests with ea…

tableau for循环_Tableau for Data Science and Data Visualization-速成课程

tableau for循环Tableau is software that can help you see and understand your data. It is used for data science and data visualization. Tableau allows you to connect to almost any database, drag and drop to create visualizations, and share with a click.Tabl…

请求接口时使用时间戳

&tnew Date().getTime()转载于:https://www.cnblogs.com/Glant/p/11271960.html

Java—servlet简单使用

【步骤 1】创建一个名为 input.html 的 HTML 页面,其中包括一个表单,表单中包含两 个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。 【步骤 2】定义一个名为 com.demo.Student 类,其中包括学号 sno 和…

phpstrom+phpstudy+postman

1.打开phpstudy xdebug 扩展 2.修改php.ini [XDebug]xdebug.profiler_output_dir"D:\phpStudy\tmp\xdebug"xdebug.trace_output_dir"D:\phpStudy\tmp\xdebug"zend_extension"D:\phpStudy\php\php-5.5.38\ext\php_xdebug.dll";是否允许Xdebug跟踪…

SIP协议

SIP协议 SIP协议主要包括 SIP头 SIP内容 和附加内容三个部分 项目格式备注示例SIP头一行,以\r\n结尾REGISTER sip:172.30.2.35 SIP/2.0\r\nSIP内容很多行,每行为Key,Value的形式CSeq: 1 REGISTER\r\n附加内容很多行1 SIP头 项目格式含义示例I…

android emmc 命令,使用CoreELEC的ceemmc工具将系统写入emmc

最近在折腾电视盒子,CoreELEC是专门为晶晨CPU开发系统,个人觉的非常不错,相关资料可以百度。这里介绍将卡载系统刷入emmc内置存储的方法。因为找不到相关的教程,只在官网上找到了ceemmc这个工具的使用说明,所以搬过来。…

ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体

ios 自定义字体by Yuichi Fujiki藤木雄一 In this article, youll learn how to create a unified custom look throughout your app with these simple tricks.在本文中,您将学习如何使用这些简单的技巧在整个应用程序中创建统一的自定义外观。 我们想做什么 (Wh…

truncate 、delete与drop区别

相同点: 1.truncate和不带where子句的delete、以及drop都会删除表内的数据。 2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。 不同点: 1. truncate 和 delete 只删除数据不删除表的结构(定义)drop 语句将删除表的结构被依赖的约束(const…

Java—jsp编程

1. 编写 login.jsp&#xff0c;登录时只输入一个昵称。但要检查昵称是否已经被其他用户使用。 源代码 Login.jsp <% page contentType"text/html;charsetUTF-8" language"java" %><%request.setCharacterEncoding("UTF-8"); //设置编…

Java 8 Optional类深度解析

2019独角兽企业重金招聘Python工程师标准>>> 身为一名Java程序员&#xff0c;大家可能都有这样的经历&#xff1a;调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null&#xff0c;只有在非空的前提下才能将其作…

鸽子 迷信_人工智能如何帮助我战胜鸽子

鸽子 迷信鸽子回避系统 (Pigeon Avoidance System) Disclaimer: You are reading Part 1 that gives an overview of the project. Part 2 describes the technical setup and data collection. Part 3 is about how to train the Pigeon Recognition Model and run it on Rasp…

华为鸿蒙会议安排,2020华为HDC日程确定,鸿蒙、HMS以及EMUI 11成最关注点

原标题&#xff1a;2020华为HDC日程确定&#xff0c;鸿蒙、HMS以及EMUI 11成最关注点HDC&#xff1a;华为开发者大会&#xff0c;目前已经确定将在9月10日正式开幕。日前华为已经在其官网公布了HDC的日程&#xff0c;从现在的消息看华为开发者大会有三大点最受业内关注。鸿蒙操…

反射、元类

一、反射 1、什么是反射&#xff1a;就是反省&#xff0c;自省的意思 反射指的是一个对象应该具备&#xff0c;可以增、删、改、查属性的能力&#xff0c;通过字符串来操作属性 涉及的四个函数&#xff0c;这四个函数就是普通的内置函数&#xff0c;只是没有下划线而已&#xf…

Java—简单的图书管理系统

简单的图书管理系统 通过数据源和DAO对象访问数据库。其中JavaBeans实现模型&#xff0c;访问数据库&#xff0c;Servlet实现控制器&#xff0c;JSP页面实现视图。 • 模型包括2个JavaBean&#xff1a;BookBean用于存放图书信息&#xff0c;BookDAO用于访问数据库。 • 控制器包…

成功的秘诀是什么_学习编码的10个成功秘诀

成功的秘诀是什么This post was originally published on Coder-Coder.com.该帖子最初发布在Coder-Coder.com上 。 If you’re teaching yourself how to code, you may have more questions than answers when you’re starting out.如果您正在教自己如何编码&#xff0c;那么…

ZJUT 地下迷宫 (高斯求期望)

http://cpp.zjut.edu.cn/ShowProblem.aspx?ShowID1423 设dp[i]表示在i点时到达终点要走的期望步数&#xff0c;那么dp[i] ∑1/m*dp[j] 1&#xff0c;j是与i相连的点&#xff0c;m是与i相邻的点数。建立方程组求解。重要的一点是先推断DK到达不了的点。须要bfs预处理一下进行…

html收款页面模板,订单收款.html

&#xfeff;订单收款$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; };…

pandas之时间数据

1.时间戳Timestamp() 参数可以为各种形式的时间&#xff0c;Timestamp()会将其转换为时间。 time1 pd.Timestamp(2019/7/13) time2 pd.Timestamp(13/7/2019 13:05) time3 - pd.Timestamp(2019-7-13) time4 pd.Timestamp(2019 7 13 13:05) time5 pd.Timestamp(2019 July 13 …