0: package Image::Filter::Blur;
1: #Oki, so I cheated a bit by using Inline::C instead :)
2: #Anyway, I owe alot to the fine folks on inline@perl.org and several monks here (derby, rob_au, zaxo)
3: #I have some other filter code lying around
4: #I plan to release this stuff to CPAN at some point, might change name tho
5: #This is ofcourse a draft, cleaner subs etc should be added later on
6: #call it :
7: #use Filter::Image::Blur;
8: #blur("inputpic.jpg","outputpic.jpg");
9: #Using PNG takes a little tweaking :)
10: #Anyway, enjoy :)
11: #Note: This is a BW based blur
12: use 5.006;
13: use strict;
14: use vars qw($VERSION @ISA @EXPORT);
15: use Exporter;
16:
17: @EXPORT = qw(blur);
18:
19: $VERSION = '0.01';
20:
21: use Inline C => Config => LIBS => '-lgd -ljpeg',
22: AUTO_INCLUDE => '#include "gd.h"';
23: use Inline C =><<EOC;
24:
25: int blur(char* infile, char* outfile)
26: { gdImagePtr im;
27: gdImagePtr imblur;
28: FILE *in, *out;
29: int dimx = 0;
30: int dimy = 0;
31: int w = 0;
32: int h = 0;
33: int index = 0;
34:
35: in = fopen(infile, "rb");
36: im = gdImageCreateFromJpeg(in);
37: fclose(in);
38: dimx = gdImageSX(im);
39: dimy = gdImageSY(im);
40: imblur = gdImageCreate(dimx,dimy);
41: for (w = 0; w < dimx ; w++)
42: { for (h = 0; h < dimy ; h++)
43: { float newfcolor = (
44: gdImageRed(im,gdImageGetPixel(im,w-1,h-1))+
45: gdImageRed(im,gdImageGetPixel(im,w-1,h))+
46: gdImageRed(im,gdImageGetPixel(im,w-1,h+1))+
47: gdImageRed(im,gdImageGetPixel(im,w,h-1))+
48: gdImageRed(im,gdImageGetPixel(im,w,h))+
49: gdImageRed(im,gdImageGetPixel(im,w,h+1))+
50: gdImageRed(im,gdImageGetPixel(im,w+1,h-1))+
51: gdImageRed(im,gdImageGetPixel(im,w+1,h))+
52: gdImageRed(im,gdImageGetPixel(im,w+1,h+1)) )/9;
53: int newcolor = (int) newfcolor;
54: newcolor = newcolor > 255 ? 255 : (newcolor < 0 ? 0 : newcolor);
55: index = gdImageColorExact(imblur,newcolor,newcolor,newcolor);
56: if (index == -1) { index = gdImageColorAllocate(imblur,newcolor,newcolor,newcolor); }
57: gdImageSetPixel(imblur,w,h,index);
58: }
59: }
60:
61: out = fopen(outfile, "wb");
62: gdImageJpeg(imblur, out,-1);
63: fclose(out);
64: gdImageDestroy(im);
65: gdImageDestroy(imblur);
66: return 1;
67: }
68: EOC
69:
70: 1;
71: __END__
In reply to Image::Filter::Blur draft by Beatnik
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |