`

用canvas实现图片滤镜效果详解之视频效果

阅读更多

 

               pattern = [ 
                   0, 1, 
                   0, 2, 
                   1, 2, 
                   1, 0, 
                   2, 0, 
                   2, 1, 
               ]; 
               break
           
           case1://VIDEO_TYPE.VIDEO_TRIPED: 
           
               pattern = [   
                   0, 
                   1, 
                   2, 
               ]; 
               break
           
           case2://VIDEO_TYPE.VIDEO_3X3: 
           
               pattern = 
               
                   0, 1, 2, 
                   2, 0, 1, 
                   1, 2, 0, 
               ]; 
               break
           
           default
           
               pattern = 
               
                   0, 1, 2, 0, 0, 
                   1, 1, 1, 2, 0, 
                   0, 1, 2, 2, 2, 
                   0, 0, 1, 2, 0, 
                   0, 1, 1, 1, 2, 
                   2, 0, 1, 2, 2, 
                   0, 0, 0, 1, 2, 
                   2, 0, 1, 1, 1, 
                   2, 2, 0, 1, 2, 
                   2, 0, 0, 0, 1, 
                   1, 2, 0, 1, 1, 
                   2, 2, 2, 0, 1, 
                   1, 2, 0, 0, 0, 
                   1, 1, 2, 0, 1, 
                   1, 2, 2, 2, 0, 
               ]; 
               break
           
       
       var pattern_width = [ 2, 1, 3, 5 ]; 
       var pattern_height = [6, 3, 3, 15 ];

  

3.获取过滤数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
for ( var x = 0; x < canvasData.width; x++) {   
         for ( var y = 0; y < canvasData.height; y++) {   
         
           // Index of the pixel in the array   
           var idx = (x + y * canvasData.width) * 4;   
           var r = canvasData.data[idx + 0];   
           var g = canvasData.data[idx + 1];   
           var b = canvasData.data[idx + 2];   
              var nWidth = pattern_width[m_VideoType]; 
              var nHeight = pattern_height[m_VideoType]; 
              var index = nWidth * (y % nHeight) + (x % nWidth); 
   
              index = pattern[index]; 
              if (index == 0) 
               var   r = fclamp0255(2 * r); 
              if (index == 1) 
               var   g = fclamp0255(2 * g); 
              if (index == 2) 
               var   b = fclamp0255(2 * b); 
                     
            // assign gray scale value   
            canvasData.data[idx + 0] = r; // Red channel   
            canvasData.data[idx + 1] = g; // Green channel   
            canvasData.data[idx + 2] = b; // Blue channel   
            canvasData.data[idx + 3] = 255; // Alpha channel   
            // 加上黑色的边框   
            if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8))    
            {   
              canvasData.data[idx + 0] = 0;   
              canvasData.data[idx + 1] = 0;   
              canvasData.data[idx + 2] = 0;   
            }   
         }   
    }

  

4.写入过滤后的数据

1
context.putImageData(canvasData, 0, 0);

  

5.效果预览

点击这里预览

5.参考资料

代震军ImageFilter开源项目

0
0
分享到:
评论

相关推荐

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

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

    《Html5 Canvas开发详解》示例代码

    动画是Canvas的一大亮点,这一章可能会介绍如何创建帧动画,利用requestAnimationFrame实现平滑的动画效果,以及运动物体的碰撞检测等。 8. **第八章**: 事件与交互 这一章将讲解如何监听用户与Canvas的交互,如...

    《HTML5 Canvas开发详解(第2版)》第二版示例代码

    4. **图像处理**:Canvas可以加载和操作图像,例如使用`drawImage()`方法绘制图片,或者通过`getImageData()`和`putImageData()`进行像素级操作,实现滤镜效果。 5. **动画**:Canvas适合创建流畅的动画,通过不断...

    HTML5 Canvas开发详解(第2版)源码

    Canvas API主要由一系列方法和属性组成,这些工具让开发者能够绘制直线、曲线、圆形、矩形以及复杂的图形,并实现动画效果。以下是一些重要的Canvas知识点: 1. **绘图基础**:Canvas提供`fillRect()`,`strokeRect...

    HTML5Canvas_开发详解_第2版_高清完整版

    - 模糊效果:`filter`属性可以应用模糊效果或其他滤镜。 - 图像数据访问:`getImageData()`和`putImageData()`可用于获取和修改像素级别的数据。 此外,Canvas的安全性和性能也是开发者需要注意的问题。由于Canvas...

    2┃音视频直播系统之浏览器中通过 WebRTC 拍照片加滤镜并保存.doc

    WebRTC 浏览器拍照加滤镜并保存技术详解 本文主要介绍了使用 WebRTC 技术在浏览器中拍照加滤镜并保存的技术实现。WebRTC(Web Real-Time Communication)是一种实时通信技术,允许浏览器之间实时地进行音视频通信。...

    HTML5 Canvas开发详解(第2版)代码

    9. **离屏Canvas**:了解如何使用离屏Canvas提高性能,以及在多个Canvas之间进行数据传输。 10. **WebGL集成**:虽然不是HTML5 Canvas的内置功能,但了解如何与WebGL结合,可以实现更复杂的3D图形绘制。 11. **...

    《HTML5 Canvas开发详解(第2版)》示例代码

    了解如何进行图像滤镜效果的实现。 6. **颜色与渐变**:创建线性渐变和径向渐变,以及如何应用渐变到图形和文本。 7. **混合模式**:探索不同的混合模式,使得图形或颜色相互叠加时产生特殊效果。 8. **动画制作*...

    安卓手绘图片处理画板相关-ImageFilterForAndroid-master几十种图片处理效果.rar

    1. 图片滤镜:滤镜是图像处理中的关键元素,通过调整像素颜色、亮度、对比度等参数,实现各种视觉效果。ImageFilterForAndroid包含多种滤镜,如模糊、锐化、色彩平衡等,满足用户对图片的艺术化需求。 2. 手绘画板:...

    canvas图像处理教程

    - **集成使用**: Canvas和WebGL可以结合起来使用,实现更复杂的图形效果。 ```javascript const gl = canvas.getContext('webgl'); // WebGL相关代码 ``` - **性能优势**: 相比纯Canvas,WebGL能够利用GPU加速,...

    canvas离屏技术与放大镜实现代码示例

    利用 canvas 除了可以实现滤镜,还可以利用 离屏技术 放大镜功能。 为了方便讲解,本文分为 2 个应用部分: 实现水印和中心缩放 实现放大镜  1. 什么是离屏技术? canvas 学习和滤镜实现 介绍过 drawImage 接口。...

    InstaFilter Android

    《Android下实现Instagram滤镜效果详解》 在移动设备上,图像处理技术已经变得日益重要,尤其是在社交媒体应用中。Instagram作为一款全球知名的图片分享应用,其独特的滤镜效果深受用户喜爱。今天,我们将深入探讨...

    jsp html5 仿windows图片查看器源码,可以下载、放大、缩小、拖动、放大某一区域

    3. 拖动功能:通过监听鼠标或触摸事件,计算出图片的当前位置,实现图片在Canvas上的平移。 4. 局部放大:当用户点击或选择图片的某一部分时,可以调用Canvas的局部放大部分,实现对选定区域的放大查看。 5. 下载...

    Android多媒体应用开发实战详解:图像、音频、视频、2D和3D 源代码.rar )

    对于更复杂的图像处理,如滤镜效果、裁剪、旋转等,可以借助OpenGL ES或第三方库如Picasso、 Glide 或 Glide4Engine 实现。 接着,音频处理方面,Android系统提供MediaPlayer类处理音频播放,它支持MP3、AAC、WAV等...

    MyColorMatrixDemo-master.rar

    3. 绘制Bitmap:使用Canvas将带有滤镜的Bitmap绘制到新的Bitmap上,或者直接在ImageView等视图上显示。 四、MyColorMatrixDemo项目详解 MyColorMatrixDemo项目包含了多个示例,演示了如何通过色彩矩阵实现不同的...

    Painter, 基于html5 Canvas 的画图程序.zip

    开发者可以通过JavaScript控制Canvas上的每一个像素,实现动态的、交互式的图形效果。 二、Painter项目简介 Painter项目是一个基于HTML5 Canvas的开源画图工具,其代码库名为"Painter-master"。该项目的目标是提供...

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

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

Global site tag (gtag.js) - Google Analytics