HTML5 Canvas 获取网页的像素值。

摘要:
CanvasPixelArray的排序应该很简单,从左上角到右下角。所以我们刚才提到的3*3像素CanvasPixelArray是36位长。我可以忽略以下算法:以下算法是从程序出版社借来的:HTML5Canvas图灵程序设置教程。我只需要得到红色,然后+1,+2,+3。恰好红色是目标像素和CanvasPixelArray的静态位置。宽度*4获取第1行CanvasPixelArray中像素值的数量。*(y-1)获取第y行第一列像素值的起始下标。

我之前在网上看过一个插件叫做出JScolor   颜色拾取器  说白了就是通过1*1PX的DOM设置颜色值通过JS来获取当前鼠标点击位置DOM的颜色值。

自从HTML5 画布出来之后。就有更好的方法来获取了,比方郭阿里巴巴ICON矢量库 用的SVG和渐变来进行绘制:

HTML5 Canvas 获取网页的像素值。第1张

我昨天用Canvas来绘制了一下。由于Canvas有现成的方法getImageData(x,y,width,height);这种方法返回一个属性data数组,也就是CanvasPixelArray

1个像素分别有四个值rgba(红,绿,蓝,阿尔法值); 1个像素就有这4个值,意味着CanvasPixelArray里面每一个像素值就占了个位置简称4X(下同)。

CanvasPixelArray的排序要简单,从左上角到右下角。长度也简单4X。比方说width*height*4.比方:3*3像素CanvasPixelArray有多少个值。3*3*4=36值。

有一点说明一下。关系到我们以下说的:像素值是从1開始。

可是数组的索引值是从0開始的。所以我们刚刚说的3*3像素CanvasPixelArray长度是36位。

可是第3*3像素它的颜色值 是[....,32,33,34,35]。索引值 须要减去4開始。道理就是像素開始的坐标是1*1.可是数组是0。

第3*3像素位置的下标開始Star和结束end我们能够脑袋想想就出来。可是假设第542*245像素的值我们怎么算。当然了。假设你是天才脑袋的话。我以下的

算法能够无视:

下面算法的借鉴来自于程序出版之家:图灵程序设置的《HTML5 Canvas教程》。

像素值:rgba在CanvasPixelArray里面的排序也是红(r),跟着是绿(g),蓝(b),阿尔法(a);依据这个规律。我也仅仅要得到红(r),然后再以此+1,+2,+3(来获取剩下的值)

而恰好红(r)是目标像素再CanvasPixelArray的stat位置。

也就是我们要获取開始的位置。剩下的就OK了。

比方是我们要获取上面542*245的值。

var width=imagedates.width;
var x=542;
var y=245;
var r=(y-1)*(width*4)+(x*4)-4);
y-1上面说过了。数组的下标是0開始的。width*4获取了1行在CanvasPixelArray有多少个像素值.*(y-1)得到了在y行第一列的像素值開始下标。以下是列了542了

(x*4)-4得到了到了距离第一列之前有多少位像素值的长度。然后相加。就到了目标像素的事实上位置 红色(r)

红色出来了。其它的就更加简单了。s

g=r+1;

b=r+2;

a=r+3;

/*************算法非常easy。关键是要又一次划分鼠标下标以及像素開始的坐标**********/

通过上面的我们就能够做一个颜色拾取器了:

(function(){
    var c=document.getElementById("MyCanvas"),
        ctx=c.getContext("2d"),
        image=new Image();
        image.src="http://t.zoukankan.com/1.png";
    image.onload=function(){
        ctx.drawImage(this,0,0);
    }   
    c.onclick=function(e){
    var x=e.clientX,y=e.clientY,x1=this.offsetLeft,y1=this.offsetTop,nowx=x-x1,nowy=y-y1;
         var imagedates=ctx.getImageData(nowx,nowy,1,1);
         var pixel=imagedates.data;
         document.getElementById("color").style["background-color"]="rgb("+pixel[0]+","+pixel[1]+","+pixel[2]+")";
     }
})()
有一点须要注意的是image.src须要和文件同源。这样才干有效执行以下的代码。不然会报错的。此外以上代码须要在server环境执行。本地測试data会返回[0,0,0,0];

免责声明:文章转载自《HTML5 Canvas 获取网页的像素值。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇改变websphere默认jdk为1.5一种面向高维数据的集成聚类算法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux中export的作用

 https://blog.csdn.net/damontive/article/details/50352722 参考:http://www.cnblogs.com/zhangze/articles/1832542.html以前一直觉得export可有可无,虽然知道export是干嘛的,不就是把本地变量变成全局变量么(实际中叫环境变量),但是感觉好像没有...

SPark SQL 从 DB 读取数据方法和方式 scala

import org.apache.spark.sql.SQLContext import org.apache.spark.SparkConf import org.apache.spark.SparkContext import java.util.HashMap import org.apache.spark.sql.Row import org.a...

flink常用命令

1.查看flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  list 2.停止flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  cancel  job Id 3.启动一个yarn session bin/yarn-session.sh -d -s 3 -jm 2048 -tm...

startUML破解方式

StarUML官方下载地址:http://staruml.io/download StarUML是一个非常好用的画UML图的工具,但是它是收费软件​,以下是破解方法: ​1.使用Editplus或者Notepad++等特殊的文本编辑器打开%StarUML_HOME%/www/license/node/LicenseManagerDomain.js文件 2....

Android屏幕density, dip等相关概念总结

 1、几个术语VGA、HVGA、QVGA、WVGA、WQVGA这些术语都是指屏幕的分辨率。VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320;QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240;WVGA:W...

图片Alpha预乘的作用[转]

Premultiplied Alpha 这个概念做游戏开发的人都不会不知道。Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的选项。那么问题来了,Premultiplied Alpha 是什么呢?我被这...