I have drawing app something like fabric.js ( http://fabricjs.com/freedrawing/ )
I want to embed the blurring tool like Photoshop ( http://www.demowolf.com/tutorials/demo.php?id=1503&series=85&format=html )
This is my blurring function but it not working fine when i am try to change color it is going something wrong you can see screenshots below ...
function boxBlurCanvasRGBA( id, top_x, top_y, width, height, radius, iterations ){
if ( isNaN(radius) || radius < 1 ) return;
radius |= 0;
if ( isNaN(iterations) ) iterations = 1;
iterations |= 0;
if ( iterations > 3 ) iterations = 3;
if ( iterations < 1 ) iterations = 1;
var canvas = document.getElementById( 'paper' );
var context = canvas.getContext("2d");
var imageData;
try {
try {
imageData = context.getImageData( top_x, top_y, width, height );
} catch(e) {
// NOTE: this part is supposedly only needed if you want to work with local files
// so it might be okay to remove the whole try/catch block and just use
// imageData = context.getImageData( top_x, top_y, width, height );
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
imageData = context.getImageData( top_x, top_y, width, height );
} catch(e) {
alert("Cannot access local image");
throw new Error("unable to access local image data: " + e);
return;
}
}
} catch(e) {
alert("Cannot access image");
throw new Error("unable to access image data: " + e);
return;
}
var pixels = imageData.data;
var rsum,gsum,bsum,asum,x,y,i,p,p1,p2,yp,yi,yw,idx,pa;
var wm = width - 1;
var hm = height - 1;
var wh = width * height;
var rad1 = radius + 1;
var mul_sum = mul_table[radius];
var shg_sum = shg_table[radius];
var r = [];
var g = [];
var b = [];
var a = [];
var vmin = [];
var vmax = [];
while ( iterations-- > 0 ){
yw = yi = 0;
for ( y=0; y < height; y++ ){
rsum = pixels[yw] * rad1;
gsum = pixels[yw+1] * rad1;
bsum = pixels[yw+2] * rad1;
asum = pixels[yw+3] * rad1;
for( i = 1; i <= radius; i++ ){
p = yw + (((i > wm ? wm : i )) << 2 );
rsum += pixels[p++];
gsum += pixels[p++];
bsum += pixels[p++];
asum += pixels[p]
}
for ( x = 0; x < width; x++ ) {
r[yi] = rsum;
g[yi] = gsum;
b[yi] = bsum;
a[yi] = asum;
if( y==0) {
vmin[x] = ( ( p = x + rad1) < wm ? p : wm ) << 2;
vmax[x] = ( ( p = x - radius) > 0 ? p << 2 : 0 );
}
p1 = yw + vmin[x];
p2 = yw + vmax[x];
rsum += pixels[p1++] - pixels[p2++];
gsum += pixels[p1++] - pixels[p2++];
bsum += pixels[p1++] - pixels[p2++];
asum += pixels[p1] - pixels[p2];
yi++;
}
yw += ( width << 2 );
}
for ( x = 0; x < width; x++ ) {
yp = x;
rsum = r[yp] * rad1;
gsum = g[yp] * rad1;
bsum = b[yp] * rad1;
asum = a[yp] * rad1;
for( i = 1; i <= radius; i++ ) {
yp += ( i > hm ? 0 : width );
rsum += r[yp];
gsum += g[yp];
bsum += b[yp];
asum += a[yp];
}
yi = x << 2;
for ( y = 0; y < height; y++) {
pixels[yi+3] = pa = (asum * mul_sum) >>> shg_sum;
if ( pa > 0 )
{
pa = 255 / pa;
pixels[yi] = ((rsum * mul_sum) >>> shg_sum) * pa;
pixels[yi+1] = ((gsum * mul_sum) >>> shg_sum) * pa;
pixels[yi+2] = ((bsum * mul_sum) >>> shg_sum) * pa;
} else {
pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;
}
if( x == 0 ) {
vmin[y] = ( ( p = y + rad1) < hm ? p : hm ) * width;
vmax[y] = ( ( p = y - radius) > 0 ? p * width : 0 );
}
p1 = x + vmin[y];
p2 = x + vmax[y];
rsum += r[p1] - r[p2];
gsum += g[p1] - g[p2];
bsum += b[p1] - b[p2];
asum += a[p1] - a[p2];
yi += width << 2;
}
}
}
context.globalAlpha = 0.8;
context.putImageData( imageData, top_x, top_y );
}
can any one give me some code example ?
You can experiment with blurring photos with any photo from our library or from your uploads. Simply select the photo, then click “filter” and “advanced options.” Slide to the right to blur, and to the left to sharpen.
The Funky Focus tool is the most versatile of all the blur tools. You can use it to create a tilt-shift effect, enhance depth of field, and add photo effects like pixelation and black and white to the blurred areas.
Then, with the image selected, click “Filter.” In the window that pops up, click “Advanced Options” at the bottom, then just adjust the Blur slider to adjust the strength of the blur until you like the way your image looks. After Blurring: To get you started, here are 3 blurred backgrounds ready to go in Canva.
How to Use the Photoshop Blur Tool. The Blur tool in Photoshop works like the Paintbrush tool. Select it from the left toolbar and paint blur onto your image. You can use this tool to soften edges and precisely apply the blur.
Interesting question!
Here's how to implement a blur brush using:
A Demo: http://jsfiddle.net/m1erickson/baDLp/
Here's how that looks in code:
(The blur effect is done using quasimondo's nice blurring algorithm: http://jsfiddle.net/m1erickson/baDLp/)
// At this point, the temp canvas contains
// only the users brush strokes
// draw the image "clipped" into those brush strokes
// using compositing == "source-in"
tempCtx.save();
tempCtx.globalCompositeOperation="source-in";
tempCtx.drawImage(img,0,0);
tempCtx.restore();
// blur the brush-image on the temp canvas
boxBlurCanvasRGBA("tempCanvas",0,0,tempCanvas.width,tempCanvas.height,4,0);
// clear the onscreen canvas
ctx.save();
ctx.clearRect(0,0,canvas.width,canvas.height);
// draw the brush-image from the temp canvas to the onscreen canvas
ctx.drawImage(tempCanvas,0,0);
// use compositing == "destination-over"
// to draw the source image *behind* the blurred brush-image
ctx.globalCompositeOperation="destination-over";
ctx.drawImage(img,0,0);
ctx.restore();
Source Image:
Offscreen canvas after drawing the image only on the stroked area and then blurring:
The onscreen canvas with the blurred area merged into the source image:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With