Created
July 23, 2012 10:00
-
-
Save rambuvn/3162918 to your computer and use it in GitHub Desktop.
Grayscale effect for html5 but still not check cross browsers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// On window load. This waits until images have loaded which is essential | |
jQuery(window).load(function(){ | |
// Fade in images so there isn't a color "pop" document load and then on window load | |
jQuery(".wedding-page .album-cover img").fadeIn(500); | |
// clone image | |
jQuery('.wedding-page .album-cover img').each(function(){ | |
var el = jQuery(this); | |
el.css({"position":"absolute"}).wrap("<div class='img_wrapper' style='display: inline-block'>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore(el).queue(function(){ | |
var el = jQuery(this); | |
el.parent().css({"width":this.width,"height":this.height}); | |
el.dequeue(); | |
}); | |
this.src = grayscale(this.src); | |
}); | |
// Fade image | |
jQuery('.wedding-page .album-cover img').mouseover(function(){ | |
jQuery(this).parent().find('img:first').stop().animate({opacity:1}, 1000); | |
}) | |
jQuery('.img_grayscale').mouseout(function(){ | |
jQuery(this).stop().animate({opacity:0}, 500); | |
}); | |
}); | |
// Grayscale w canvas method | |
function grayscale(src){ | |
var canvas = document.createElement('canvas'); | |
var ctx = canvas.getContext('2d'); | |
var imgObj = new Image(); | |
imgObj.src = src; | |
canvas.width = imgObj.width; | |
canvas.height = imgObj.height; | |
ctx.drawImage(imgObj, 0, 0); | |
var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height); | |
for(var y = 0; y < imgPixels.height; y++){ | |
for(var x = 0; x < imgPixels.width; x++){ | |
var i = (y * 4) * imgPixels.width + x * 4; | |
var avg = (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; | |
} | |
} | |
ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height); | |
return canvas.toDataURL(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment