【HTML5】图片灰度化

【HTML5】图片灰度化,第1张

function onStart() {

var canvas = document.getElementByIdx_x_x_x_x_x_x("lesson01")

if(canvas.getContext)

{

var context = canvas.getContext("2d")

var pic = new Image()

pic.onload=function(){

context.drawImage(pic,0, 0)

}

pic.src = "http://imgsrc.baidu.com/forum/pic/item/e6b14bc2a4561b1fe4dd3b24.jpg"

}

}

下面写一个例子关于利用canvas实现图片变灰的code.

<html>

<head>

<script>

window.onload = function () {

var canvas = document.getElementByIdx_x_x_x("myCanvas")

var image = document.getElementByIdx_x_x_x("imageSource")

// 将图片的高宽赋值给画布

canvas.width = image.width

canvas.height = image.height

// 获得二维渲染上下文

if (canvas.getContext) {//为了安全起见,先判断浏览器是否支持canvas

var context = canvas.getContext("2d")

context.drawImage(image, 0, 0)//将得到的image图像绘制在canvas对象中

var canvasData = context.getImageData(0, 0, canvas.width, canvas.height)//返回ImageData对象

alert(canvasData.width.toString())

alert(canvasData.height.toString())

// 填充灰色【读取像素值和实现灰度计算】

for (var x = 0x <canvasData.widthx++) {

for (var y = 0y <canvasData.heighty++) {

// 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 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

// 新增黑色边框

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

}

}

}

context.putImageData(canvasData, 0, 0)// 处理完成的数据重新载入到canvas二维对象中

} else {

alert("your browser does not support canvas!")

}

}

</script>

</head>

<body>

<h2>Hello World!</h2>

<img id="imageSource" src="1.jpg" alt="Canvas Source" />

<canvas id="myCanvas" >Gray Filter</canvas>

</body>

</html>

1、CSS Filter

使用CSS过滤器属性可能是最简单的方法把图像变成灰度。以往,IE浏览器有一个专有的CSS属性称为过滤应用自定义效果包括灰度。

现在,过滤器属性是CSS3规范的一部分,并支持在一些浏览器,Firefox、Chrome和Safari。以前,我们也提到Webkit过滤器,它不仅将图像变成灰色也可以变成褐色和模糊效果。

添加如下CSS样式可以将图像变成灰色

代码如下:

img {

-webkit-filter: grayscale(1)/* Webkit */

filter:gray/* IE6-9 */

filter: grayscale(1)/* W3C */

}

支持IE6-9和Webkit浏览器(Chrome 18+, Safari 6.0+, and Opera 15+)

(注意:这段代码在Firefox上无效果。)

2、Javascript

第二种方法是通过使用JavaScript技术上应该支持所有JavaScript的浏览器,包括IE6以下

代码来自Ajax Blender.

代码如下:

varimgObj = document.getElementById('js-image')

functiongray(imgObj) {

varcanvas = document.createElement('canvas')

varcanvasContext = canvas.getContext('2d')

varimgW = imgObj.width

varimgH = imgObj.height

canvas.width = imgW

canvas.height = imgH

canvasContext.drawImage(imgObj, 0, 0)

varimgPixels = canvasContext.getImageData(0, 0, imgW, imgH)

for(vary = 0y <imgPixels.heighty++){

for(varx = 0x <imgPixels.widthx++){

vari = (y * 4) * imgPixels.width + x * 4

varavg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3

imgPixels.data[i] = avg

imgPixels.data[i + 1] = avg

imgPixels.data[i + 2] = avg

}

}

canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height)

returncanvas.toDataURL()

}

imgObj.src = gray(imgObj)

3、SVG

第三种方法来自SVG Filter.,你需要创建一个SVG文件,并将以下代码写在里面,保存命名为***.svg

代码如下:

<svgxm .w3.org/2000/svg">

<filterid="grayscale">

<feColorMatrixtype="matrix"values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/>

</filter>

</svg>

然后利用过滤器的属性,我们可以通过SVG文件中的元素的ID连接SVG文件

[code]

img {

filter:url('img/gray.svg#grayscale')

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7303627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存