相关文章推荐
刀枪不入的匕首  ·  uni-app ...·  11 月前    · 
斯文的豆浆  ·  解决:'webpack-dev-server ...·  1 年前    · 
潇洒的西瓜  ·  对象存储 PUT Object-API ...·  1 年前    · 
<div class= "huabu" > <input type= "file" id= "file_input" /> <canvas id= "canvasA" width= "600" height= "600" ></canvas> <div class= "anniu" > 添加图片 </div> <div class= "data" > <div id= "col" ></div> <li> RGB:(0,0,0) </li> <li> 十六进制 :#000000 </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.页面结构如下:&amp;lt;h1&amp;gt;取色器&amp;lt;/h1&amp;gt;&amp;lt;div class=&quot;bd&quot;&amp;gt; &amp;lt;div class=&quot;huabu&quot; &amp;gt; &amp;lt;input type=&quot;file&quot; id=&quot;file_input&quot 将 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()); 这段代码会在页面上