`

用canvas实现图片滤镜效果详解之灰度效果

阅读更多

前面展示了一些canvas实现图片滤镜效果的展示,并且给出了相应的算法,下面来介绍一下具体的实现方法。

前面介绍的特效中灰度效果最简单,就从这里开始介绍吧。

1.获取图像数据

 
  1. img.src = ’http://bloglaotou.duapp.com/wp-content/themes/frontopen2/tools/filter/image2.jpg’;  
  2. canvas.width  = img.width;  
  3. canvas.height = img.height;   
  4. var context = canvas.getContext(“2d”);  
  5. context.drawImage(img, 00);  
  6. var canvasData = context.getImageData(00, canvas.width, canvas.height);    

2.通过灰度算法处理图像数据

 
  1. //  1.灰度效果  
  2. //计算公式 .299 * r + .587 * g + .114 * b;  
  3. // calculate gray scale value  
  4.  
  5.  for ( var x = 0; x < canvasData.width; x++) {  
  6.      for ( var y = 0; y < canvasData.height; y++) {  
  7.   
  8.        // Index of the pixel in the array  
  9.        var idx = (x + y * canvasData.width) * 4;  
  10.        var r = canvasData.data[idx + 0];  
  11.        var g = canvasData.data[idx + 1];  
  12.        var b = canvasData.data[idx + 2];  
  13.        var gray = .299 * r + .587 * g + .114 * b;  
  14.               
  15.         // assign gray scale value  
  16.         canvasData.data[idx + 0] = gray; // Red channel  
  17.         canvasData.data[idx + 1] = gray; // Green channel  
  18.         canvasData.data[idx + 2] = gray; // Blue channel  
  19.         canvasData.data[idx + 3] = 255// Alpha channel  
  20.         // 加上黑色的边框  
  21.         if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8))   
  22.         {  
  23.           canvasData.data[idx + 0] = 0;  
  24.           canvasData.data[idx + 1] = 0;  
  25.           canvasData.data[idx + 2] = 0;  
  26.         }  
  27.      }  
  28. }  

3.把新的图像数据写入canvas

 
  1. context.putImageData(canvasData, 00);  

4.效果预览

这里看预览

0
0
分享到:
评论

相关推荐

    用Canvas+Javascript FileAPI 实现一个图片剪切、滤镜处理、上传下载工具.docx

    6. **滤镜处理**: 使用Canvas的像素操作能力,我们可以直接对图像的像素数据进行操作,实现各种滤镜效果。例如,文档中提到了灰度、黑白和反色三种滤镜。这些滤镜通过遍历像素数组并应用相应的算法来改变每个像素的...

    android获取灰度图片

    ### Android 获取灰度图片知识点详解 #### 一、概述 在Android开发中,有时需要将彩色图片转换为灰度图片,以实现特定的功能或视觉效果。例如,在即时通讯应用中,通常会用彩色头像表示用户在线状态,而用灰度头像...

    MyColorMatrixDemo-master.rar

    在MyColorMatrixDemo中,我们可以看到如何设置和应用色彩矩阵来实现各种滤镜效果,例如灰度、饱和度调整、色彩反转等。色彩矩阵的变换包括但不限于: 1. 灰度转换:通过将RGB值转换为它们的平均值来实现。 2. 色调...

    一步步教你利用Canvas对图片进行处理

    【Canvas图片处理详解】 Canvas是HTML5中的一个重要组成部分,它为网页提供了在浏览器中动态绘制图形的能力。在本文中,我们将深入探讨如何利用Canvas对图片进行处理,包括图像的加载、绘制、数据获取、修改以及...

    Delphi7编程100例

    实现图像的灰度级处理效果 3种像素历遍方法的比较和实现 实现屏幕拷贝 实现图像漫游 4种幕布式图像显示技巧 盘旋法实现9种滤镜效果 图形朦胧叠合显示技巧 给MDI主窗体增加背景 实现图像的淡入淡出...

    Delphi编程100例

    实现图像的灰度级处理效果 3种像素历遍方法的比较和实现 实现屏幕拷贝 实现图像漫游 4种幕布式图像显示技巧 盘旋法实现9种滤镜效果 图形朦胧叠合显示技巧 给MDI主窗体增加背景 实现图像的淡入淡出显示 多媒体播放器 ...

    《Delphi7编程100例》代码

    ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态...详解Canvas生成渐变色窗口背景WINAPM风格磁化窗口软件封面的图片显示制作实现图片的任意角度旋转奇妙的拼图游戏使用PaintBox控件制作画图程序...

    使用tkinter和PIL实现的类似于ps的小工具

    4. **滤镜与效果**:可以实现模糊、锐化、边缘检测等效果,使用filter()函数。 5. **像素访问**:通过像素级操作,可以对图像进行精细修改。 **tkinter与PIL的结合** 在"使用tkinter和PIL实现的类似于ps的小工具...

    Delphi7 编程 100 实例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条...详解Canvas生成渐变色窗口背景 WINAPM风格磁化窗口 软件封面的图片显示制作 实现图片的任意角度旋转 奇妙的拼图游戏 使用...

    delphi7编程百例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态...详解Canvas生成渐变色窗口背景 WINAPM风格磁化窗口 软件封面的图片显示制作 实现图片的任意角度旋转 奇妙的拼图游戏 ...

    ColorMatrixDemo:实现类似QQ离线用户头像彩色变灰色的效果

    通过设置ColorMatrix,我们可以实现对图像的滤镜效果,包括将彩色图像转换为灰度图像。 3. **Bitmap和Canvas**:`Bitmap`是Android中用于存储图像数据的类,而`Canvas`则提供了在Bitmap上绘制图形的方法。在实现...

    CSS3网页元素过滤器功能.zip

    而IE和较旧版本的其他浏览器可能需要使用CSS滤镜的IE专有版本(如`progid:DXImageTransform.Microsoft.Blur`)或者借助像Modernizr这样的库来实现兼容。 **五、实践与示例** 在实际项目中,滤镜常用于创建诸如照片...

    face-filter-sample

    例如,可以使用CSS3的`canvas`元素结合JavaScript绘制图形,或者直接修改图像数据来添加滤镜效果,如色彩调整、光照效果、3D模型等。 6. **性能优化**:实时脸部滤镜需要在低延迟下运行,因此性能优化至关重要。...

    PhotoChop:U-tad Android 练习

    4. **滤镜应用**:通过ColorMatrix或第三方库(如OpenCV、Pillow-Android等)实现各种滤镜效果,如灰度、饱和度调整、复古风格等。 5. **保存与分享**:将编辑后的图片保存到设备,并提供分享功能。这需要使用...

Global site tag (gtag.js) - Google Analytics