2013年12月1日 星期日

Canvas 圓點馬賽克

不支援Canvas。

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <title>pixelation2</title>
    <meta name="description" content="" />
    <meta name="author" content="hua" />
 </head>
<body style="background: black">
     <canvas id="myCanvas">不支援Canvas。</canvas>     
</body>
</html>
<script type="text/javascript">
(function(){
    var canvas,context,img = new Image(),imgDatas=[],frame=0;
    var init = function(){
        canvas = document.getElementById('myCanvas');        
        context = canvas.getContext('2d');       
        img.addEventListener('load' ,loadHandler , false);
        img.src = "images/dali.jpg";   
    };
    
    var loadHandler = function(e){
        //console.log(canvas);
        canvas.width = img.width;
        canvas.height = img.height;
        //context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
        context.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);  
        var imageData = context.getImageData(0, 0, canvas.width, canvas.height); 
        var pixels = imageData.data; 

        context.clearRect(0, 0, canvas.width, canvas.height); 

        var numTileRows = 20; 
        var numTileCols = 20; 

        var tileWidth = imageData.width/numTileCols; 
        var tileHeight = imageData.height/numTileRows; 

        for (var r = 0; r < numTileRows; r++) { 
                for (var c = 0; c < numTileCols; c++) { 
                     var x = (c*tileWidth)+(tileWidth/2); 
                     var y = (r*tileHeight)+(tileHeight/2);                     
                     var pos = (Math.floor(y)*(imageData.width*4))+(Math.floor(x)*4); 
                     var red = pixels[pos]; 
                     var green = pixels[pos+1]; 
                     var blue = pixels[pos+2]; 
                     
                    context.fillStyle = "rgb("+red+", "+green+", "+blue+")"; 
                    //繪製方式換成圓
                    context.beginPath(); 
                    context.arc(x, y, tileWidth/2, 0, Math.PI*2, false); 
                    context.closePath(); 
                    context.fill(); 
                }; 
        }; 

    };  
    init();
}()); 
</script>

HTML5 Canvas 馬賽克

不支援Canvas。


<canvas id="myCanvas201312010546">不支援Canvas。</canvas>     

</html>
<script type="text/javascript">
(function(){
    var canvas,context,img = new Image(),imgDatas=[],frame=0;
    var init = function(){
        canvas = document.getElementById('myCanvas201312010546');        
        context = canvas.getContext('2d');       
        img.addEventListener('load' ,loadHandler , false);
        //img.src = "images/dali.jpg"; 
        img.src = '你圖片的所在路徑';

    };
    
    var loadHandler = function(e){
        //console.log(canvas);
        canvas.width = img.width;
        canvas.height = img.height;
        //context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
        context.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);  
        var imageData = context.getImageData(0, 0, canvas.width, canvas.height); 
        var pixels = imageData.data; 

        context.clearRect(0, 0, canvas.width, canvas.height); 
        
        //馬賽克磚塊數量
        var numTileRows = 30; 
        var numTileCols = 30; 

        //每一塊馬賽克磚的長寬
        var tileWidth = imageData.width/numTileCols; 
        var tileHeight = imageData.height/numTileRows; 
        //馬賽克主要演算邏輯
        for (var r = 0; r < numTileRows; r++) { 
                for (var c = 0; c < numTileCols; c++) { 
                    //顏色取樣點,該取樣點的周圍九宮格,將會與此點設成同色
                    var x = (c*tileWidth)+(tileWidth/2); 
                    var y = (r*tileHeight)+(tileHeight/2);                     
                    var pos = (Math.floor(y)*(imageData.width*4))+(Math.floor(x)*4); 
                     
                    //取得顏色
                    var red = pixels[pos]; 
                    var green = pixels[pos+1]; 
                    var blue = pixels[pos+2]; 
                     //重新填滿色塊
                    context.fillStyle = "rgb("+red+", "+green+", "+blue+")"; 
                    context.fillRect(x-(tileWidth/2), y-(tileHeight/2), tileWidth, tileHeight); 
                }; 
        }; 
    };  
    init();
}()); 
</script>

HTML5 Canvas Shadow

不支援Canvas。


     <canvas style="background-color:#000000" id="myCanvas201312010535" width="400" height="300">不支援Canvas。</canvas>

<script type="text/javascript">
(function(){
    var canvas,context,img;
    var init = function(){
        canvas = document.getElementById('myCanvas201312010535');
        context = canvas.getContext('2d');                   
    }; 
    
    var drawShadow = function(e){
        context.shadowBlur = 50; //光暈,模糊
        context.shadowColor = "rgba(255, 255, 255 ,1)";  //也可以使用rag(r,g,b)  or  直接給色碼
        context.beginPath();
        context.arc(100,100,50,0,Math.PI*2,false);
        context.closePath();
        context.fillStyle = "rgba(88,178,220,0.5)";
        context.fill();
        
        context.shadowBlur = 60; //光暈,模糊
        context.shadowColor = "rgba(225, 225, 225 ,1)";  //也可以使用rag(r,g,b)  or  直接給色碼
        context.shadowOffsetX = 10;
        context.shadowOffsetY = -5;
        context.beginPath();
        context.arc(250,100,50,0,Math.PI*2,false);
        context.closePath();
        context.fillStyle = "rgba(251,226,81,0.6)";
        context.fill(); 
         
     };    
    init();
    drawShadow();
}()); 
</script>

Canvas 負片

img
不支援Canvas。 canvas


<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <title>canvas_filter2</title>
    <meta name="description" content="" />
    <meta name="author" content="hua" />
 </head>
<body>
     img<img id="myImg">
     canvas<canvas id="myCanvas" width="200" height="200">
                不支援Canvas。
     </canvas>  
</body>
</html>
<script type="text/javascript">
(function(){
    var canvas,context,img;
    var init = function(){
        canvas = document.getElementById('myCanvas');
        context = canvas.getContext('2d');
        img = document.getElementById('myImg');
        img.addEventListener('load' ,loadHandler , false);
        img.src = "images/lena.png";
    };
 
    var loadHandler = function(e){
        context.drawImage(img , 0, 0);
        var imgData = context.getImageData(0, 0, canvas.width, canvas.height);
        var data = imgData.data;
        var dataSize = data.length;
        //主要公式
        for (var i = 0; i < dataSize ; i=i+4) {
                    data[i] = 255 - data[i];         //R
                    data[i + 1] = 255 - data[i + 1]; //G
                    data[i + 2] = 255 - data[i + 2]; //B                
        }
        context.putImageData(imgData, 0, 0);
    };
    init();
}());
</script>