获取图片像素颜色并转换为CSS 3 box-shadow显示

原理:

1.使用FileReader 读取图片

2.使用canvas 的 getImageData 获取图片像素信息

3.将像素信息转换为CSS3 box-shadow

代码:

<!DOCTYPE HTML PUBLIC>
<html>
 <head>
  <meta charset="utf-8">
  <title>获取图片像素颜色,转换为css3 box-shadow</title>  

  <style type="text/css">
    body{margin: 0px; background:#f2f2f0;}
    p{margin:0px;}
    .title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;}
    .file{position:absolute; width:100%; font-size:90px;}
    .filebtn{display:block; position:relative; height:110px; color:#FFFFFF; background:#06980e; font-size:48px; line-height:110px; text-align:center; cursor:pointer; border: 3px solid #cccccc;}
    .filebtn:hover{background:#04bc0d;}
    .showimg{margin:10px auto 10px auto; -webkit-transition: all .3s; transition: all .3s;}
    .showimg span{width:1px; height:1px; display:block; margin: -1px 0px 0px -1px;}
    .css_code{margin:10px; padding:10px; display:none; border:1px solid #FFCC00; font-size:12px; background:#F1F1F1; white-space:pre-wrap; word-wrap:break-word; height:300px; overflow:auto;}
    .css_code:hover{
        background:#DEFEDE;
    }
  </style>  

  <script type="text/javascript">
  window.onload = function(){  

    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    var showimg = document.getElementById('showimg');
    var shadow = showimg.getElementsByTagName('span')[0];
    var css_code = document.getElementById('css_code');  

    document.getElementById('img').onchange = function(){
        var img = event.target.files[0];  

        // 检查能否读取图片
        if(!img){
            return ;
        }  

        // 检查图片类型
		//返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/
        if(!(img.type.indexOf('image')==0 && img.type && /\.(?:jpg|png|gif)$/.test(img.name)) ){
            alert('图片只能是jpg,gif,png');
            return ;
        }  

        // 检查图片尺寸
        if(img.size > 120*1024){
            alert('图片不能大于120K');
            return ;
        }  

        // file reader
        var reader = new FileReader();
        reader.readAsDataURL(img);  

        reader.onload = function(e){ // reader onload start  

            var image = new Image();
            image.src = e.target.result;  

            image.onload = function(){ // image onload start  

                var img_width = this.width;
                var img_height = this.height;  

                // 设置画布尺寸
                canvas.width = img_width;
                canvas.height = img_height;  

                // 将图片按像素写入画布
                context.drawImage(this, 0, 0, img_width, img_height);  

                // 读取图片像素信息
                var imageData = context.getImageData(0, 0, img_width, img_height);  

                var arrbox = [],
                    length = imageData.data.length;  

                // 生成box-shadow
                for(var i=0; i<length; i++){  

                    if(i%4 === 0){ // 每四个元素为一个像素数据 r,g,b,alpha  

                        var x = i/4%img_width + 1;                               // 横坐标
                        var y = Math.floor(i/4/img_width) + 1;                   // 纵坐标
                        var alpha = Math.round(imageData.data[i+3]/255*100)/100; // alpha 值  

                        if(imageData.data[i+3]==255){ // 没有alpha 值
                            var hex = gethex(imageData.data[i], imageData.data[i+1], imageData.data[i+2]);
                            arrbox.push(x + 'px ' + y + 'px #' + hex);  

                        }else if(alpha>0){ // 有alpha 值
                            var rgba = imageData.data[i] + ',' + imageData.data[i+1] + ',' + imageData.data[i+2] + ',' + alpha;
                            arrbox.push(x + 'px ' + y + 'px rgba(' + rgba + ')');
                        }  

                    }
                }  

                // 将数据写入dom
                showimg.style.width = img_width + 'px';
                showimg.style.height = img_height + 'px';  

                shadow.style.boxShadow = arrbox.join(',');  

                // 输出CSS3 box-shadow
                css_code.style.display = 'block';
                css_code.innerHTML = 'box-shadow: ' + arrbox.join(',');  

                // 获取16进制颜色
                function gethex(r,g,b){
                    r = r.toString(16);
                    g = g.toString(16);
                    b = b.toString(16);  

                    // 补0
                    r.length==1? r = '0' + r : '';
                    g.length==1? g = '0' + g : '';
                    b.length==1? b = '0' + b : '';  

                    var hex = r + g + b;  

                    // 简化处理,如 FFEEDD 可以写为 FED
                    if(r.slice(0,1)==r.slice(1,1) && g.slice(0,1)==g.slice(1,1) && b.slice(0,1)==b.slice(1,1)){
                        hex = r.slice(0,1) + g.slice(0,1) + b.slice(0,1);
                    }  

                    return hex;
                }  

            } // image onload end  

        } // reader onload end
    }  

  }
  </script>  

 </head>  

 <body>
  <p class="title">获取图片像素颜色,转换为CSS3 box-shadow</p>
  <p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片(小于120K)</label></p>
  <p class="showimg" id="showimg"><span></span></p>
  <p class="css_code" id="css_code"></p>
 </body>
</html>

作者:csdn博客 傲雪星枫

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索图片
, 像素
, px
, var
, slice
, 读取图片像素
, getImageData报错
box-shadow
css box shadow、css3 box shadow、css3 box shadow参数、css boxshadow inset、css3 box shadow 发光,以便于您获取更多的相关知识。

时间: 2024-10-03 14:37:56

获取图片像素颜色并转换为CSS 3 box-shadow显示的相关文章

JavaScript获取图片像素颜色并转换为box-shadow显示_javascript技巧

一.原理: 1.使用HTML5的FileReader API读取图片FileReader文件读物器,用于读取客户端文件到,注意,文件读取完毕后并不会载入缓存 eg: var upfile = document.querySelector('#upfile'); var fileReader = new FileReader(); fileReader.onload = function(evt) { if(FileReader.DONE==fileReader.readyState) { var

Python通过PIL获取图片主要颜色并和颜色库进行对比的方法

 这篇文章主要介绍了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法,实例分析了Python通过PIL模块操作图片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照

php Imagick获取图片RGB颜色值_php技巧

很多图片站点都会根据用户上传的图片检索出图片的主要颜色值,然后在通过颜色搜索相关的图片. 之前按照网上的方法将图片缩放(或者马赛克)然后遍历每个像素点,然后统计处RGB次数最多的值,这做法效率太低而且取到的RGB值不够精确.之后才发现使用Imagick的quantizeImage方法能够很方便的取到图片中平均的RGB值. $average = new Imagick("xiaocai.jpg"); $average->quantizeImage( 10, Imagick::COL

Java简单获取字符串像素的方法_java

本文实例讲述了Java简单获取字符串像素的方法.分享给大家供大家参考,具体如下: 计算字符串的像素长度与高度: Graphics2D g = (Graphics2D)Toolkit.getDefaultToolkit(). getImage("imgname").getGraphics(); // 设置大字体 Font font = new Font("楷体", Font.ITALIC | Font.BOLD, 72); g.setFont(font); FontR

python获取图片颜色信息的方法_python

本文实例讲述了python获取图片颜色信息的方法.分享给大家供大家参考.具体分析如下: python的pil模块可以从图片获得图片每个像素点的颜色信息,下面的代码演示了如何获取图片所有点的颜色信息和每种颜色的数量. from PIL import Image image = Image.open("jb51.gif") image.getcolors() 返回结果如下 复制代码 代码如下: ..., (44, (72, 64, 55, 255)), (32, (231, 208, 14

javascript 获取图片颜色_javascript技巧

利用canvas的2d对象,我们可以获取图片每个像素点的数据 CanvasPixelArray 舜子这里也写了一个简单的 getImageData 的演示 图片取色演示.这个演示目前只能在ff3下运行. 能够获取像素点后,是不是以后的OCR文字识别系统都直接online了呢? 相关资料: http://www.whatwg.org/specs/web-apps/current-work/

两行 CSS 代码实现图片任意颜色赋色技术

很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现,又或者不仅仅局限于 PNG 图片.    mix-blend-mode 与 background-blend-mode mix-blend-mode 在我之前的一篇文章初略介绍过 -- 不可思议的混合模式 mix-blend-mode,与本文的主角 background-blend-mode 一样,都是实现混合模式的. 混合模式最常见于 pho

javascript中获取页面所有选择符的css规则实现代码

 代码如下 复制代码 <script type="text/javascript"> /* ################################################### * 说明:用 javascript 获取页面上有选择符的 CSS 规则 * 包括'内部样式块'和'外部样式表文件' * 作者:Yanfu Xie [xieyanfu@yahoo.com.cn] * 网址:http://www.111cn.net * 日期:2007.01.16 *

JBuilder设计获取图片属性程序

一.基本概述 图片的应用越来越深入到我们的日常生活中, 譬如目前盛行的短信业务和初露头角的彩信业务等.因此,我们很有必要获取图片的字节数.格式.色彩数.宽度和高度等信息,以更好地在手机上达到完美的效果,满足消费者的迫切需要,提高业务的终合竞争力. 二.图片相关信息说明 1.GIF图片 GIF图片格式标识符为GIF87A/GIF89A两种,但我们一般看到的GIF图片后缀名均为"GIF".利用UltraEdit软件打开某个GIF图片文件(例如178×42×32 GIF),你将会看到类似如下