美文网首页
canvas图片操作/canvas像素级操作/canvas视频(

canvas图片操作/canvas像素级操作/canvas视频(

作者: 子心_ | 来源:发表于2019-07-10 09:12 被阅读0次

canvas图片操作

    图片动画,一条游动的鱼
    //核心代码
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <style media="screen">
            body {background:black; text-align:center;}
            #c1 {background:white;}
            </style>
            <script>
            window.onload=function (){
            let oC=document.getElementById('c1');
            let gd=oC.getContext('2d');

            let pause=false;//控制是否暂停游动,默认是否
            let i=0;//图片下标
            let x=100;//默认起始位置
            let frameCounter=0;//动画计数器

            let oImg=new Image();
            oImg.src='fish1.png';//一张游动的鱼,行走图
            oImg.onload=function (){
                requestAnimationFrame(next);//调用帧动画
                function next(){
                if(!pause){//如果没有暂停
                    gd.clearRect(0, 0, oC.width, oC.height);//清除原图片

                    if(frameCounter%4==0){//动画计数器,用来控制动画频率
                        i++;//切换图片
                        if(i==4)i=0;//超过第四张图片就回到第一张
                    }

                    x+=1.5;//鱼的位置+1.5,向前进
                    //画鱼,连续切换行走图,实现原地游动,x++实现向前游动
                    gd.drawImage(
                    oImg,
                    //sx, sy, sw, sh
                    0, i*37, 55, 37,
                    //dx, dy, dw, dh
                    x, 100, 55, 37
                    );

                    frameCounter++;//计数器++
                }

                requestAnimationFrame(next);//递归调用帧动画
                }
            };

            document.onclick=function (){
                pause=!pause;//控制点击暂停
            };
            };
            </script>
        </head>
        <body>
            <canvas id="c1" width="800" height="600"></canvas>
        </body>
    </html>

canvas像素级操作

        window.onload=function (){
        let oC=document.getElementById('c1');
        let gd=oC.getContext('2d');
        let W=oC.width,H=oC.height;
        let oImg=new Image();
        oImg.src='http://localhost/2018-3-20/2.jpg';
        oImg.onload=function (){
            gd.drawImage(oImg, 0, 0);
            let imageData=gd.getImageData(0, 0, W, H);
            let data=imageData.data;
            for(let r=0;r<H;r++){
            for(let c=0;c<W;c++){
                //(r*W+c)*4 行*宽+列可以得到像素点,*4得到RGBA
                //(r*W+c)*4+0       =>    r
                //(r*W+c)*4+1       =>    g
                //(r*W+c)*4+2       =>    b
                //(r*W+c)*4+3       =>    a
                data[(r*W+c)*4+0]=data[(r*W+c)*4+1]=data[(r*W+c)*4+2]=
                1.0*(data[(r*W+c)*4+0]+data[(r*W+c)*4+1]+data[(r*W+c)*4+2])/3;//除以3得到平均值,就是灰色,乘以倍数即可提高亮度
            }
            }
            gd.putImageData(imageData, 0, 0);
        };
        };

canvas视频(video)操作

    <script>
        window.onload=function (){
        let oV=document.getElementById('v1');
        let oC=document.getElementById('c1');
        let gd=oC.getContext('2d');

        let W=oC.width,H=oC.height;

        requestAnimationFrame(next);

        function next(){
            gd.drawImage(oV, 0, 0);

            //
            let imageData=gd.getImageData(0, 0, W, H);
            let data=imageData.data;

            for(let r=0;r<H;r++){
            for(let c=0;c<W;c++){
                data[(r*W+c)*4+0]=data[(r*W+c)*4+1]=data[(r*W+c)*4+2]=
                (data[(r*W+c)*4+0]+data[(r*W+c)*4+1]+data[(r*W+c)*4+2])/3;
            }
            }
            gd.putImageData(imageData, 0, 0);
            requestAnimationFrame(next);
        }
        };
    </script>
    </head>
    <body>
        <video src="movie.ogg" id="v1" autoplay loop style="display:none;"></video>
        <canvas id="c1" width="320" height="240"></canvas>
    </body>

相关文章

网友评论

      本文标题:canvas图片操作/canvas像素级操作/canvas视频(

      本文链接:https://www.haomeiwen.com/subject/nmmtkctx.html