JS實(shí)現(xiàn)馬賽克圖片效果完整示例
本文實(shí)例講述了JS實(shí)現(xiàn)馬賽克圖片效果。分享給大家供大家參考,具體如下:
整體邏輯:獲取oldImg圖片的像素信息,以5*5為單位,在5*5單位中取到一個(gè)隨機(jī)像素并賦值給5*5中的所有像素點(diǎn),加以循環(huán),以實(shí)現(xiàn)馬賽克效果。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>chabaoo.cn JS圖片馬賽克</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
background-color: grey;
text-align: center;
}
#myCanvas {
background-color: rgba(250, 0, 0, 0.3);
}
</style>
</head>
<body>
<canvas id="myCanvas" width="500" height="400"></canvas>
</body>
<script type="text/javascript">
window.onload = function() {
var myCanvas = document.getElementById('myCanvas');
var painting = myCanvas.getContext('2d');
//生成一個(gè)圖片節(jié)點(diǎn)
var imgNode = new Image();
imgNode.src = '1.jpg';
//調(diào)用函數(shù)
drawImg(imgNode);
function drawImg(imgNode) {
//圖片加載后執(zhí)行馬賽克實(shí)現(xiàn)語(yǔ)句:5個(gè)一組取到隨機(jī)像素賦給新圖里的五個(gè)一組
imgNode.onload = function() {
painting.drawImage(imgNode, 0, 0, 250, 400);
var size = 5;
//獲取老圖所有像素點(diǎn)
var oldImg = painting.getImageData(0, 0, 250, 400)
//創(chuàng)建新圖像素對(duì)象
var newImg = painting.createImageData(250, 400)
for(var i = 0; i < oldImg.width; i++) {
for(var j = 0; j < oldImg.height; j++) {
//從5*5中獲取單個(gè)像素信息
var color = getPxInfo(oldImg, Math.floor(i * size + Math.random() * size), Math.floor(j * size + Math.random() * size))
//寫(xiě)入單個(gè)像素信息
for(var a = 0; a < size; a++) {
for(var b = 0; b < size; b++) {
// (a,b)
setPxInfo(newImg, i * size + a, j * size + b, color);
}
}
}
}
painting.putImageData(newImg, 250, 0)
}
}
//讀取單個(gè)像素信息
function getPxInfo(imgDate, x, y) {
var colorArr = [];
var width = imgDate.width;
colorArr[0] = imgDate.data[(width * y + x) * 4 + 0]
colorArr[1] = imgDate.data[(width * y + x) * 4 + 1]
colorArr[2] = imgDate.data[(width * y + x) * 4 + 2]
colorArr[3] = imgDate.data[(width * y + x) * 4 + 3]
return colorArr;
}
//寫(xiě)入單個(gè)像素信息
function setPxInfo(imgDate, x, y, colors) {
//(x,y) 之前有多少個(gè)像素點(diǎn) == width*y + x
var width = imgDate.width;
imgDate.data[(width * y + x) * 4 + 0] = colors[0];
imgDate.data[(width * y + x) * 4 + 1] = colors[1];
imgDate.data[(width * y + x) * 4 + 2] = colors[2];
imgDate.data[(width * y + x) * 4 + 3] = colors[3];
}
}
</script>
</html>
更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《JavaScript+HTML5特效與技巧匯總》、《JavaScript圖形繪制技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- C#對(duì)圖片進(jìn)行馬賽克處理可控制模糊程度的實(shí)現(xiàn)代碼
- java實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)和馬賽克化
- Java實(shí)現(xiàn)給圖片添加圖片水印,文字水印及馬賽克的方法示例
- php實(shí)現(xiàn)圖片局部打馬賽克的方法
- php實(shí)現(xiàn)圖片添加描邊字和馬賽克的方法
- 自己用jQuery寫(xiě)了一個(gè)圖片的馬賽克消失效果
- 用javascript實(shí)現(xiàn)的圖片馬賽克后顯示并切換加文字功能
- 用javascript實(shí)現(xiàn)圖片馬賽克后顯示并切換
- three.js 將圖片馬賽克化的示例代碼
相關(guān)文章
JS 有趣的eval優(yōu)化輸入驗(yàn)證實(shí)例代碼
這篇文章介紹了eval優(yōu)化輸入驗(yàn)證實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
與ClientWidth有關(guān)的一點(diǎn)資料
與ClientWidth有關(guān)的一點(diǎn)資料...2006-08-08
使用firebug進(jìn)行調(diào)試javascript的示例
調(diào)試javascript的方法有很多,在本文為大家介紹下使用firebug是如何做到的,感興趣的朋友可以參考下2013-12-12
Javascript 拖拽的一些高級(jí)的應(yīng)用(逐行分析代碼,讓你輕松了拖拽的原理)
這篇文章主要介紹了Javascript 拖拽的一些高級(jí)的應(yīng)用(逐行分析代碼,讓你輕松了拖拽的原理),需要的朋友可以參考下2015-01-01
onclick與listeners的執(zhí)行先后問(wèn)題詳細(xì)解剖
javascript中onclick與listeners的執(zhí)行先后問(wèn)題一直都是大家所疑惑的地方,接下來(lái)將為大家解決此疑惑,感興趣的朋友可以了解下哦2013-01-01
JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)帶動(dòng)畫(huà)返回頂部的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)帶動(dòng)畫(huà)返回頂部的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08
關(guān)于JavaScript的面向?qū)ο蠛屠^承有利新手學(xué)習(xí)
這是一篇關(guān)于JavaScript的面向?qū)ο蠛屠^承的文章,對(duì)想學(xué)習(xí)JavaScript中面向?qū)ο蟮耐瑢W(xué)來(lái)說(shuō)是很有幫助,雖然一些Javascript用戶可能永遠(yuǎn)也不需要知道原型或面向?qū)ο笳Z(yǔ)言的性質(zhì),但是那些來(lái)自傳統(tǒng)面向?qū)ο蟮恼Z(yǔ)言的開(kāi)發(fā)者使用的時(shí)候會(huì)發(fā)現(xiàn)JavaScript的繼承模型非常的奇怪2013-01-01

