html5图片灰度显示,HTML5 组件Canvas实现图像灰度化
HTML5發布已經有很長一段時間了,一直以來從來沒有仔細的看過,過年剛來隨便看看
發現HTML5中的Canvas組件功能是如此的強大,不怪很多牛人預言Flash已死,死不死
不是我要關心的,我關心的Canvas可以很輕松在網頁中實現簡單相框和圖像灰度化。
一起來看看HTML5 Canvas是怎么做到的吧!
1. 新建一個html頁面,在body tag之間加入
Gray Filter2. 添加一段最簡單的JavaScript代碼:window.onload = function() { var canvas = document.getElementById("myCanvas"); // do something here!! }從Canvas對象獲取繪制對象上下文Context的代碼如下:
var context = canvas.getContext("2d");在html頁面中加入一幅圖像的html代碼如下:
從html?img對象中獲取image?對象的javascript代碼如下:
var image = document.getElementById("imageSource");將得到的圖像繪制在Canvas對象中的代碼如下:
context.drawImage(image, 0, 0);
從Canvas對象中獲取圖像像素數據的代碼如下:
var canvasData = context.getImageData(0, 0, canvas.width, canvas.height);讀取像素值與實現灰度計算的代碼如下:
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]; // calculate gray scale value var gray = .299 * r + .587 * g + .114 * b; // assign gray scale value canvasData.data[idx + 0] = gray; // Red channel canvasData.data[idx + 1] = gray; // Green channel canvasData.data[idx + 2] = gray; // Blue channel canvasData.data[idx + 3] = 255; // Alpha channel // add black border 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; } } }其中計算灰度公式為?gray?color?=?0.299×?red?color?+0.578×?green?color?+0.114*?blue?color
讀取出來的像素值順序為RGBA?分別代表red?color,?green?color,?blue?color,?alpha?channel
處理完成的數據要重新載入到Canvas中。代碼如下:
context.putImageData(canvasData, 0, 0);程序最終的效果如下:
完全源代碼如下:
Hello World!
Gray Filter 代碼中的文件可以替換任意你想要看到的圖片文件,HTML5,?原來如此神奇。程序在google瀏覽器中測試通過千萬不要在本地嘗試運行上面的代碼,google
瀏覽器的安全檢查會自動阻止從瀏覽器中讀寫非domain的文件最好在tomcat或
者任意個web?container的server上發布以后從google瀏覽器查看效果即可。
總結
以上是生活随笔為你收集整理的html5图片灰度显示,HTML5 组件Canvas实现图像灰度化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rmd文件怎么转换html文件,提取.R
- 下一篇: 动态加载的html没有js效果,JS利用