圖片獲取像素坐標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.pswp.cn/news/392037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392037.shtml
英文地址,請注明出處:http://en.pswp.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 …