</li>
2.JS部分如下(需要引用JQ库,我用的是1.12版本):
<script>
$(function () {
//初始化canvas
var canvasA = $('#canvasA')[0];
var cxtA = canvasA.getContext('2d');
var img = new Image();//定义图像对象
var pxData=null;
var $lis=$("li");
//读取文件
$("input[type='file']").change(function(){
var file = this.files[0];
if (window.FileReader) {
var reader = new FileReader();
reader.readAsDataURL(file);
//监听文件读取结束后事件
reader.onloadend = function (e) {
// $(".file_img").attr("src",e.target.result); //e.target.result就是最后的路径地址
img.src = e.target.result;
//图片读取完毕后,写到canvas里面
img.onload = function(){
if(img.width>600||img.height>600){
$("#canvasA").attr("width",img.width/2);
$("#canvasA").attr("height",img.height/2);
}else if(img.width<300&&img.height<300){
$("#canvasA").attr("width",img.width*2);
$("#canvasA").attr("height",img.height*2);
}else {
$("#canvasA").attr("width",600);
$("#canvasA").attr("height",600);
cxtA.drawImage(img, 0, 0, canvasA.width, canvasA.height);
var imgDataA = cxtA.getImageData(0, 0, canvasA.width, canvasA.height);
pxData = imgDataA.data; //获取每一个像素
//获得鼠标相对于画布的坐标点
$("#canvasA").on("click",function (e) {
//获取鼠标位置
var positionX=e.pageX - $(this).offset().left - parseFloat($(this).css('border-left-width'));
var positionY=e.pageY - $(this).offset().top - parseFloat($(this).css('border-top-width'));
//当前位置对应的成员
var imgdata= positionY*canvasA.width+positionX;
//获得rgb值
var r = pxData[4*imgdata+0];
var g = pxData[4*imgdata+1];
var b = pxData[4*imgdata+2];
var grey = 0.3*r + 0.59*g + 0.11*b;//灰度公式
$("#col").css("backgroundColor","rgba("+r+","+g+","+b+")");
// $("#col").css("backgroundColor","rgba("+r+","+g+","+b+","+grey+")");
$lis.eq(0).text("RGB:("+r+","+g+","+b+")");
$lis.eq(1).text("十六进制:#"+r.toString(16)+g.toString(16)+b.toString(16));
$(".anniu").on("click" , function () {
$("#file_input").click();
</script>
3.改良方向,页面UI有点丑,添加网络路径的图片等
本文只是用于本人学习的记录,存在bug,图片过大会导致取色有问题,猜想是边框设置问题,后续改进~1.页面结构如下:&lt;h1&gt;取色器&lt;/h1&gt;&lt;div class="bd"&gt; &lt;div class="huabu" &gt; &lt;input type="file" id="file_input"
将
RGB
A像素的平面阵列(如Uint8ClampedArray中的Uint8ClampedArray )转换为新的
Canvas
。
var
rgb
aToPixels = require ( '
rgb
a-to-
canvas
' )
var
canvas
=
rgb
aToPixels ( pixels , [ 128 , 128 ] )
document . body . appendChild (
canvas
)
canvas
=
rgb
aToPixels(array, shape)
对于给定的
RGB
A数据平面array (Uint8Array或Uint8ClampedArray)和[width, height]形状,返回带有指定像素的新画布。
麻省理工学院,有关详细信息,请参阅 。
颜色选择器
不使用任何图像资源的
Javascript
Hue Saturation Value颜色选择器。 它可以与
HTML
canvas
元素一起使用,因此它主要适用于0至255之间的
RGB
数组,如下所示:[255,127,0]。
Include These:
css
/color_picker.
css
js/color_picker.js
Usage Example:
color_picker.
html
添加触摸支持。
将<
canvas
>投射到矩阵
使用Arduino / ESP8266通过WebSocket将任何<
canvas
>元素投射到LED矩阵。
通过使用带WiFi的Arduino兼容板,例如ESP8266,通过WiFi将流实时地传输到LED矩阵,从而将
HTML
画布项目带入现实世界。
通过USB投射? 请参阅以使用USB上的串行连接在不使用WiFi的情况下进行投射。
通过WiFi流式传输任何画布元素
使用60fps的225像素和30fps的504像素进行测试
2D或3D(WebGL)
支持所有流行的LED类型(由供电)
矩阵亮度控制
自定义像素布局映射
矩阵状态像素
网站状态/控制
显示器不仅需要是纯网格,自定义像素映射还可以创建任何显示器形状或布局。
在此示例设置中,我们使用:
ESP8266 NodeMCU
15x15
RGB
LED矩阵(WS281
RGB
_GameOfLife
受康威生命游戏启发的
javascript
模拟器。 此
实现
的设计考虑了 Internet 独立性,这就是它放弃任何服务器端脚本的原因。
此模拟使用<
canvas
>元素和一些轻量级
jQuery
将像素阵列绘制为图像。 它在以下方面与康威的生命游戏不同:
RGB
通道通过环境增量在每个步骤中单独计算
具有足够高或足够低的 R、G 或 B
值
的每个像素可以相应地增加或减少其其他
值
每个像素根据其相对于其邻居的
值
获得 R、G 或 B 增量和减量。
像素循环可以反转最大
值
或最小
值
变异会导致像素的
RGB
值
乱序
疾病会导致像素将其 R、G 或 B
值
替换为其邻居
值
的平均
值
。
小试牛刀,
实现
了六款简单常见
HTML
5
Canvas
特效滤镜,并且封装成一个纯
JavaScript
可调用的API文件gloomyfishfilter.js。支持的特效滤镜分别为: 1.反色 2.灰色调 3.模糊 4.浮雕 5.雕刻 6.镜像滤镜原理解释: 1.反色:
获取
一个像素点
RGB
值
r, g, b则新的
RGB
值
为(255-r, 255-g, 255-b) 2.灰色调:
获取
一个像素点
RGB
值
r, g, b则新的
RGB
值
为 代码如下: newr = (r * 0.272) + (g * 0.534) + (b * 0.131); newg = (r * 0.349) + (g * 0.686
本文首发于我的个人博客nikolausliu.top
在MDN上学习
canvas
相关API时,看到有个demo(下图)跟平时用的拾色器有点像。于是我想
canvas
能不能用来做拾色器呢?仔细想了一下,答案是可以的,并做了一个简单的demo(双击拾色)。在这里把思路简单记录一下。
先看MDN上的例子
直接贴代码
function draw() {
var ctx = document.ge...
在
canvas
画布中,我们往往需要
获取
到某个点的像素颜色,例如我们常见的调色板。今天以官网上提供的方格调色板为例,在此基础上稍微做一下扩展,讲解一下如何根据鼠标的位置
获取
某个点的
RGB
值
。
可以点击某个方格,然后在下面的小方格中会显示对应的颜色
1、这个例子中有两个
canvas
,大的
canvas
展示调色板,小的
canvas
展示用户选取的颜色。
2、大的
canvas
通过两个for循环、fillStyle和fillRect在小矩形框中渲染颜色
3、通过鼠标的mousedown事件,
获取
转自给力技术 http://site518.net/color-picker-colorjoe/
我们在之前曾经推荐过一些颜色拾取器的
Javascript
类库,今天再给大家推荐一个
JavaScript
颜色拾取器
- colorjoe。
本文主要整理前人的文章,并增强色彩饱和度,在此记录留用
基础
html
结构
<span style='display: inline-block;width:100px;height: 100px;' id='span'>12</span>
<img id="imgs" src="http://127.0.0.1:8081/
rgb
1.jpg" alt="" width="300" height="400">
借助
canvas
图片
主要
rgb
色
值
var img
let getObjectURL = function(file){
let url = null ;
if (window.createObjectURL!=undefined) { // basic
有时候我们需要通过
图片
去获得具体像素的颜色。而强大的
Canvas
为我们提供了现成的接口。 这个功能其实并不难,只不过我们需要正确的理解
Canvas
并学会利用它的 API 。
如果你急于看到效果,可以直接访问
我不会详细得写下每一个步骤,但是你可以一边参照源码,一边配合这篇教程进行阅读。
绘制
图片
(-)
首先,我们需要基于
图片
去绘制
Canvas
。
创建一...
// 烟花终点坐标
this.targetX = Math.random() *
canvas
.width;
this.targetY = Math.random() *
canvas
.height;
// 烟花颜色
this.color = `
rgb
(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`;
// 烟花半径
this.radius = 4;
// 烟花速度
this.speed = 8;
// 烟花加速度
this.acceleration = 1.05;
// 烟花已经消失的标志
this.done = false;
// 更新烟花位置
this.update = function() {
// 计算距离目标点的距离
const distanceX = this.targetX - this.x;
const distanceY = this.targetY - this.y;
const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);
// 如果烟花已经到达目标点,则设置烟花已经消失的标志为 true
if (distance < 10) {
this.done = true;
// 计算烟花的速度和加速度
const speedX = distanceX / distance * this.speed;
const speedY = distanceY / distance * this.speed;
this.speed *= this.acceleration;
// 更新烟花的位置
this.x += speedX;
this.y += speedY;
// 绘制烟花
this.draw = function() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
// 在每次点击鼠标时创建一个新的烟花对象
canvas
.addEventListener("click", function(event) {
fireworks.push(new Firework());
这段代码会在页面上