最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

Javascript + jQuery, applying a blur effect to background images - Stack Overflow

matteradmin5PV0评论

Is there a way to apply a "blur" effect on a background image in Javascript/jQuery?

[edit] By "blur" I mean a Gaussian/Motion blur not a drop shadow :)

Thank you.

Is there a way to apply a "blur" effect on a background image in Javascript/jQuery?

[edit] By "blur" I mean a Gaussian/Motion blur not a drop shadow :)

Thank you.

Share Improve this question edited Aug 9, 2010 at 12:32 Barrie Reader asked Aug 9, 2010 at 9:45 Barrie ReaderBarrie Reader 10.7k11 gold badges77 silver badges141 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 6

The simplest, most cross-browser-friendly way to do this will be to create blurred and non-blurred versions of your background image ahead of time, and use JavaScript to swap the blurred version in when you want to. Something like:

$('#hoverMe').hover(function ()
{
    $(this).css('background-image', 'url(blurredBackground.png)');
});

Edit: It's a bit of a cop-out, but all you need to do is create a new image element for Pixastic to operate on. Since Pixastic uses a canvas anyway, you can let the library do the work for you, and then just call toDataURL() to get a URL string. Then, pass that string back into the background-image CSS.

Very basic demo here. Tested in Chrome, Firefox.

Notes:

  • I couldn't get this to work in IE 8 in under 5 minutes (though it might be possible - Pixastic's cross-browser support info) - I have no patience for IE.
  • The images you're blurring must be from the same origin (domain and subdomain) as the page you're blurring them in. Otherwise, you'll get a security exception (and no blurring). This is a security feature of canvas, as per the spec. This is why my example image is jsbin's favicon, and not an image that's bigger/more interesting/from anywhere else.
  • If you're doing any sort of repeated blurs of the same image, I would strongly remend caching the result(s) of toDataURL() so the browser doesn't have to repeat its work. I don't know how toDataURL() works under the hood so this might not be entirely straightforward.

Happy blurring!

I encountered the same problem today, My solution was the following. I used the regular way to use pixastic and blur an image. Pixastic then in my case created a canvas element. I made sure this canvas element had an id, and by getting its data, i used the data to set my background-image.

Example:

HTML:

<div id="hiddenDiv" style="width:0px; height: 0px;"></div>

Javascript:

var img = new Image();
img.id = "blurredImage"
img.onload = function() {
    Pixastic.process(img, "blur", function(){
        var canvas = document.getElementById('blurredImage');
        var dataURL = canvas.toDataURL("image/png");
        document.getElementById('blurredImage').style.backgroundImage = 'url("' +  dataURL + '")';
    });
}
document.getElementById("hiddenDiv").appendChild(img);
img.src = "myimage.jpg";

It's quite a workaround, however I had to use floating divs, which made me unable to use position absolute, and z-index's and I won't blurr tons of images.

Goodluck!

There is this jquery-plugin blur.js which does what you are looking for.

Articles related to this article

Post a comment

comment list (0)

  1. No comments so far