Gunnar Peipman's ASP.NET blog

ASP.NET, C#, SharePoint, SQL Server and general software development topics.

Sponsors

News

 
 
 
 
 
DZone MVB

Links

Social

Example: resizing uploaded image

One of my readers asked for example about my image resizing routine. Here you can find example and also some notes about my code design solution.

Why I used streams?

First, the resizing method is thought for web applications. Second, using streams is more general solution that using file paths (you don’t want to save files to hard disc if you get them from file upload and save to database). Web application may get image files from following sources:

  • files located on web server hard disc,
  • file uploads,
  • web services,
  • BLOB field of database table.

For first two sources we can ask stream directly. For the other two we can create memory stream and write byte array with image bytes to it.

Streams are useful also for output. Output stream may be file, response output stream or memory stream by example. And you can use also other streams that you need. In the case of file stream the resized image is written to file. In the case of response output stream the resized image is written back to browser. If you use memory stream then you may convert it to byte array so you can send image to database or post to web service.

Example

Let’s see now simple example that resizes images and uses streams. We have Resize.aspx page that accepts file uploads. If image is uploaded then it resizes it to 50% and shows it to user. If error occurs then error message is printed out.


protected void Page_Load(object sender, EventArgs e)

{

    if (Request.Files.Count > 0)

    {

        ShowPreview();

        return;

    }

}

protected void ErrorMessage(string error)

{

    var outputBuilder = new StringBuilder();

    outputBuilder.Append("<html><head></head><body>");

    outputBuilder.Append("<span>");

    outputBuilder.Append(error);

    outputBuilder.Append("</span>");

    outputBuilder.Append("</body></html>");

 

    try

    {

        Response.Clear();

        Response.ContentType = "text/html";

        Response.Write(outputBuilder);

        Response.End();

    }

    catch { }

}

 

protected void ShowPreview()

{

    var file = Request.Files[0];           

    try

    {

        Response.Clear();

        Response.ContentType = file.ContentType;

        ResizeImage(0.5,file.InputStream, Response.OutputStream);

        Response.End();               

    }

    catch (ArgumentException)

    {

        ErrorMessage("Unknown image file!");

    }

    catch(ThreadAbortException)

    {

 

    }

    catch (Exception ex)

    {

        ErrorMessage("Unknown error: " + ex);

    }

}

 

private void ResizeImage(double scaleFactor, Stream fromStream, Stream toStream)

{

    var image = Image.FromStream(fromStream);

    var newWidth = (int)(image.Width * scaleFactor);

    var newHeight = (int)(image.Height * scaleFactor);

    var thumbnailBitmap = new Bitmap(newWidth, newHeight);

 

    var thumbnailGraph = Graphics.FromImage(thumbnailBitmap);

    thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;

    thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;

    thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

 

    var imageRectangle = new Rectangle(0, 0, newWidth, newHeight);

    thumbnailGraph.DrawImage(image, imageRectangle);

 

    thumbnailBitmap.Save(toStream, image.RawFormat);

 

    thumbnailGraph.Dispose();

    thumbnailBitmap.Dispose();

    image.Dispose();

}


You can use this resizing method also in desktop applications and web services.

Experiments.ResizeImage.zip Experiments.ResizeImage.zip
VS2010 solution | 835KB
Source code @ GitHub Source code repository
GitHub

Comments

Rija said:

Hi,

This codes doesnt work.

# April 3, 2009 8:43 AM

Henry said:

Why don't you just use the built in Image.GetThumbnailImage method for creating thumbnails...?!

# April 3, 2009 8:47 AM

Petar Petrov said:

Hi.

I'm a great fan of your blog. I like your ResizeImage method but I'm also a great fan of 'using'. So I will rewrite your method as :

private void ResizeImage(double scaleFactor, Stream fromStream, Stream toStream)

{

using (var image = Image.FromStream(fromStream))

{

var newWidth = (int)(image.Width * scaleFactor);

var newHeight = (int)(image.Height * scaleFactor);

var imageRectangle = new Rectangle(0, 0, newWidth, newHeight);

using (var thumbnailBitmap = new Bitmap(newWidth, newHeight))

{

using (var thumbnailGraph = Graphics.FromImage(thumbnailBitmap))

{

thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;

thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;

thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

thumbnailGraph.DrawImage(image, imageRectangle);

thumbnailBitmap.Save(toStream, image.RawFormat);

}

}

}

}

Because if I pass 0 as scaleFactor - newWidth and newHeight will be 0 and 0 respectively. So the constructor of Bitmap will throw an exception and image.Dispose(); will be not called. The version with 'using' doesn't have this flaw.

My 2 cents.

# April 3, 2009 9:39 AM

DigiMortal said:

Henry, my previous blog entry describes problems with GetThumbnailImage. weblogs.asp.net/.../resizing-images-without-loss-of-quality.aspx

# April 3, 2009 1:01 PM

DigiMortal said:

Thanks, Petar! Your suggestion is very good! :)

# April 4, 2009 5:39 PM

TipsOnLips.net said:

ASP.NET Image Resources

# April 5, 2009 9:38 PM

Elmer said:

This works very well. Thank you for sharing the example.

# February 4, 2010 4:06 PM

Derek Gould said:

This is great code. I'm just learning this stuff, and struggling a bit I admit. Here's my goal;

I have a set of forms where users can upload images, which are being saved to image fields in a SQL Server db (using Telerik Radcontrols). What I'd like is when the image is uploaded, to resize it before it is saved (or load, resize and re-save/overwrite at the lower resolution). Users can upload any size images, but there's no need to have images any larger than 800x600 hence the resize. I'm not sure how or when to do this; any suggestions?

# March 4, 2010 3:32 PM

MAyur nirmal said:

Thanks a lot.

This post have helped me a lot.

This 3 line of code i was missing

thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;

   thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;

   thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

# March 12, 2010 9:12 AM

ap said:

Thanks a lot.

This post have helped me a lot.

# May 27, 2010 2:31 PM

Peter Smith said:

Hi Gunnar,

I think the possibilities with your suggested code are awesome, I just have difficulties using it. Please see  this discussion on your post here: forums.asp.net/.../4095389.aspx

If you have ANY hints/tips, help me out! :)

Hopefully I can soon implement this code in my applications, since its the best one I've seen out there!

# September 23, 2010 3:59 PM

john said:

hi gunnar ,

   i am new bie to .net......

I am getting images from webservices. when i try to resize the image, i am losing quality .. please help me for this

# October 4, 2010 12:08 AM

Adam said:

I really like this example but how would I go about saving this to file or displaying it in an image tag once it has been resized? Basically I want to attempt impliment this on a site giving the user the ability to adjust the image on the fly prior to saving to file.

# October 20, 2010 3:58 PM

Adam said:

Nevermind on my comment above I read through the forum and found your example. Thanks a bunch, this is great.

# October 20, 2010 4:30 PM

JA said:

Running the attached project file Experiments.ResizeImage.zip, the generated thumbnail if zoomed(reized) using the Windows Photo Viewer does not give the same image(original.jpg). This shows that the thumbnail has some information missing.

# October 27, 2010 5:50 PM

JA said:

Even if I resize the generated thumbnail(153 height and 204 width) with a scale factor of 10 (To generate image with same dimensions as original(2048 width and 1536 height). The new generated image is bad.

# October 27, 2010 5:59 PM

Sach said:

What are the names spaces required in order to compile the above code? I have imported System.Drawing but it is not compiling for me. And i wnat to resize image when admin uploads in my site, so how do i call the above method?

# October 29, 2010 10:10 AM

kindle fire reviews said:

Really informative blog.Much thanks again. Keep writing.

# May 3, 2012 6:36 AM

actresses wallpapers said:

Im thankful for the blog.Much thanks again. Really Cool.

# May 3, 2012 8:10 AM

twitter bot said:

Major thankies for the blog post.Thanks Again. Awesome.

# May 3, 2012 8:40 AM

toy said:

Really appreciate you sharing this article.Really looking forward to read more. Really Great.

# May 4, 2012 10:48 PM

More said:

Very informative article post.Thanks Again. Really Great.

# May 5, 2012 12:17 AM

Hardcore mode said:

This is one awesome article post.Really looking forward to read more.

# May 5, 2012 4:47 AM

London Piano Institute said:

Thanks a lot for the article post.Much thanks again. Great.

# May 7, 2012 5:39 AM

swingers said:

Really appreciate you sharing this blog. Cool.

# May 7, 2012 6:26 AM

love advice said:

Really enjoyed this article.Really looking forward to read more. Great.

# May 7, 2012 7:07 AM

swinging said:

I really liked your article.Really looking forward to read more. Keep writing.

# May 7, 2012 7:53 AM

about sci-fi art said:

Thanks for the article.Much thanks again. Much obliged.

# May 7, 2012 8:36 AM

uk swingers said:

Really enjoyed this blog.Thanks Again. Cool.

# May 7, 2012 9:20 AM

Achille Castiglioni said:

Awesome blog.Much thanks again.

# May 7, 2012 9:38 AM

Party bus rental in Los Angeles said:

Enjoyed every bit of your post.Really looking forward to read more. Want more.

# May 7, 2012 11:35 AM

advocacy said:

Enjoyed every bit of your blog.Much thanks again. Really Great.

# May 7, 2012 12:39 PM

how to make money fast said:

Great, thanks for sharing this blog post.Thanks Again. Really Great.

# May 7, 2012 1:04 PM

best bodybuilding supplements said:

Thanks so much for the article post.Thanks Again. Much obliged.

# May 7, 2012 2:06 PM

spyware removal said:

Thanks for the blog post.Much thanks again. Much obliged.

# May 7, 2012 2:34 PM

2 said:

wow, awesome blog article. Will read on...

# May 7, 2012 3:17 PM

iphone 4s unlocked said:

Thanks-a-mundo for the article post.Thanks Again. Much obliged.

# May 7, 2012 3:33 PM

washington divorce service said:

Im thankful for the blog article.Thanks Again. Great.

# May 7, 2012 3:34 PM

stella dot jewelry said:

Im obliged for the article.Much thanks again. Awesome.

# May 7, 2012 5:14 PM

weight loss patches said:

This is one awesome blog article.Much thanks again. Really Great.

# May 7, 2012 5:16 PM

home remedies for acne marks said:

Im thankful for the post. Really Cool.

# May 7, 2012 5:48 PM

leiloes judiciais said:

Muchos Gracias for your blog article.Really looking forward to read more. Keep writing.

# May 7, 2012 6:13 PM

webhostingtalk review said:

Appreciate you sharing, great blog. Really Great.

# May 7, 2012 7:41 PM

taylormade atv wedge said:

Hey, thanks for the post. Will read on...

# May 7, 2012 8:46 PM

iddaa said:

Wow, great blog post.Thanks Again. Much obliged.

# May 7, 2012 9:08 PM

xtremeno said:

I really enjoy the article.Much thanks again. Really Cool.

# May 7, 2012 10:16 PM

cash said:

Im obliged for the blog article.Much thanks again. Really Great.

# May 7, 2012 10:38 PM

cannabis corpse said:

Very good blog article.Thanks Again.

# May 7, 2012 11:47 PM

butet saddle said:

Thanks for the blog.Really looking forward to read more.

# May 7, 2012 11:50 PM

turnkey adult website said:

Enjoyed every bit of your article.Really looking forward to read more. Cool.

# May 8, 2012 12:07 AM

where to buy wartrol said:

Fantastic article post.Really looking forward to read more. Awesome.

# May 8, 2012 1:31 AM

Speck Iphone Case said:

Im obliged for the blog article.Thanks Again. Great.

# May 8, 2012 1:37 AM

phone apps new zealand said:

I loved your blog.Much thanks again. Much obliged.

# May 8, 2012 2:06 AM

tutorials / hints said:

wow, awesome blog post.Thanks Again. Want more.

# May 8, 2012 2:15 AM

privatarkt said:

Thanks for the article.

# May 8, 2012 3:07 AM

iphone 4s unlocked said:

Thanks-a-mundo for the blog.Thanks Again. Fantastic.

# May 8, 2012 3:13 AM

domestic staffing agency said:

I truly appreciate this blog article.Much thanks again. Fantastic.

# May 8, 2012 3:38 AM

sell said:

Im thankful for the post.Thanks Again. Want more.

# May 8, 2012 6:37 AM

online backup said:

This is one awesome article.Much thanks again. Will read on...

# May 8, 2012 9:39 AM

prom dresses said:

Major thanks for the blog.Really looking forward to read more. Awesome.

# May 8, 2012 11:11 AM

arizona dispensary said:

Great blog.Really looking forward to read more. Want more.

# May 8, 2012 12:43 PM

planchas ghd said:

I think this is a real great blog post.Thanks Again. Fantastic.

# May 8, 2012 3:03 PM

Work from home said:

Fantastic blog post.Much thanks again. Keep writing.

# May 8, 2012 3:49 PM

Louis Vuitton Sito Ufficiale said:

Looking forward to reading more. Great post. Awesome.

# May 8, 2012 4:36 PM

Promotional Gifts said:

Thanks so much for the blog article.Thanks Again. Keep writing.

# May 8, 2012 5:21 PM

ocarina said:

Hey, thanks for the article post. Keep writing.

# May 8, 2012 6:05 PM

Haviland said:

Thanks-a-mundo for the post.Really looking forward to read more. Will read on...

# May 8, 2012 6:09 PM

http://www.melovemoney.com/wealthyaffiliate said:

Really enjoyed this article post.

# May 8, 2012 7:34 PM

foreclosure said:

Muchos Gracias for your article post. Much obliged.

# May 8, 2012 8:25 PM

http://www.alcoholabusecenter.com said:

Wow, great post.Really looking forward to read more. Want more.

# May 8, 2012 9:05 PM

Instant Movies said:

wow, awesome blog.

# May 8, 2012 9:57 PM

hid headlights said:

Hey, thanks for the blog.Much thanks again. Awesome.

# May 8, 2012 11:29 PM

Wholesale clothing said:

I appreciate you sharing this blog article.Really looking forward to read more. Want more.

# May 8, 2012 11:32 PM

growing said:

Say, you got a nice blog article.Thanks Again. Really Cool.

# May 9, 2012 2:35 AM

mieszkania said:

Hey, thanks for the article.Really looking forward to read more. Great.

# May 9, 2012 2:36 AM

Walkers said:

Hey, thanks for the blog post.Really looking forward to read more. Really Great.

# May 9, 2012 3:40 AM

Car Cover said:

I appreciate you sharing this blog post. Great.

# May 9, 2012 5:05 AM

html template said:

I truly appreciate this article post.Really looking forward to read more. Fantastic.

# May 9, 2012 5:44 AM

Gifts For The Bride said:

Enjoyed every bit of your blog post.Much thanks again. Awesome.

# May 9, 2012 7:07 AM

ile kosztuje wybudowanie domu said:

Looking forward to reading more. Great blog.Really looking forward to read more. Want more.

# May 9, 2012 7:17 AM

Met said:

Thanks for sharing, this is a fantastic article post.Really looking forward to read more. Cool.

# May 9, 2012 7:18 AM

payday advance said:

Appreciate you sharing, great blog article.Much thanks again. Great.

# May 9, 2012 8:49 AM

Cart Bags said:

Muchos Gracias for your blog post. Want more.

# May 9, 2012 9:08 AM

Curtains said:

Very informative blog post.Thanks Again. Great.

# May 9, 2012 11:11 AM

jackpot pen said:

Thanks for sharing, this is a fantastic article. Really Great.

# May 9, 2012 11:14 AM

press said:

Awesome blog.Much thanks again. Great.

# May 9, 2012 11:59 AM

Candles said:

I really like and appreciate your blog post.Much thanks again. Much obliged.

# May 9, 2012 12:45 PM

Download full version games said:

wow, awesome article post. Great.

# May 9, 2012 1:34 PM

proxy said:

I really liked your post.Thanks Again. Great.

# May 9, 2012 2:25 PM

a said:

Looking forward to reading more. Great blog post.Thanks Again.

# May 9, 2012 3:09 PM

mugshots said:

Thanks so much for the article post.Really looking forward to read more. Great.

# May 9, 2012 4:00 PM

doghe said:

Im thankful for the blog article. Keep writing.

# May 9, 2012 4:46 PM

information said:

Major thankies for the post.Thanks Again. Cool.

# May 9, 2012 5:35 PM

irons said:

wow, awesome post. Really Cool.

# May 9, 2012 5:35 PM

stain said:

Appreciate you sharing, great post.Much thanks again. Much obliged.

# May 9, 2012 6:23 PM

psx said:

Major thanks for the blog.Really looking forward to read more. Great.

# May 9, 2012 7:11 PM

spray paint car said:

A round of applause for your blog.Thanks Again. Great.

# May 9, 2012 7:13 PM

getting rid of bats said:

I value the article.Thanks Again. Really Great.

# May 9, 2012 8:49 PM

iris web solutions melbourne said:

I really like and appreciate your article post.Really looking forward to read more. Really Cool.

# May 9, 2012 10:27 PM

��������� ��������� ������ said:

Very good blog article.Much thanks again. Really Cool.

# May 10, 2012 12:00 AM

dreamcast roms said:

Thanks-a-mundo for the blog post.Thanks Again. Much obliged.

# May 10, 2012 3:21 AM

www.underfloorheatingcost.org.uk said:

I appreciate you sharing this blog post.Really looking forward to read more.

# May 10, 2012 3:56 AM

Yoga Classes Surrey, BC said:

Really enjoyed this blog article.Thanks Again. Much obliged.

# May 10, 2012 4:55 AM

easy video producer said:

I truly appreciate this blog article. Will read on...

# May 10, 2012 6:33 AM

Affiliate Marketing Strategies said:

Really enjoyed this post.Really looking forward to read more. Awesome.

# May 10, 2012 6:40 AM

salehoo said:

Really appreciate you sharing this blog post.Really looking forward to read more. Cool.

# May 10, 2012 7:26 AM

apartments bangkok said:

I appreciate you sharing this article post.Really looking forward to read more. Cool.

# May 10, 2012 8:11 AM

sell said:

I really like and appreciate your blog. Great.

# May 10, 2012 10:42 AM

dating said:

This is one awesome blog article.Really looking forward to read more. Really Cool.

# May 10, 2012 11:29 AM

homepage said:

Major thanks for the blog article.Thanks Again. Cool.

# May 10, 2012 11:37 AM

HP2-Z23 said:

I really liked your post.Thanks Again. Much obliged.

# May 10, 2012 1:09 PM

greiti kreditai said:

Im obliged for the blog post.Much thanks again. Cool.

# May 10, 2012 1:18 PM

cheap underfloor heating thermostats said:

I truly appreciate this article post. Keep writing.

# May 10, 2012 1:53 PM

dog products said:

I really enjoy the post.Really looking forward to read more. Much obliged.

# May 10, 2012 2:49 PM

buy targeted web traffic said:

Enjoyed every bit of your article post.Much thanks again. Cool.

# May 10, 2012 2:58 PM

how to install underfloor heating mats said:

Say, you got a nice blog.Thanks Again. Much obliged.

# May 10, 2012 3:36 PM

hcg day diet refill said:

Very neat article.Much thanks again. Want more.

# May 10, 2012 4:29 PM

model agency said:

I loved your blog article.Really looking forward to read more. Much obliged.

# May 10, 2012 4:40 PM

water underfloor heating kits said:

Great, thanks for sharing this blog.Thanks Again. Really Cool.

# May 10, 2012 5:20 PM

web based support system said:

Really enjoyed this blog post.Really looking forward to read more. Awesome.

# May 10, 2012 6:10 PM

Kathrine Dunwoody said:

I think this is a real great blog. Awesome.

# May 10, 2012 7:15 PM

football equipment evolution said:

Awesome blog post.Much thanks again.

# May 10, 2012 7:51 PM

Cash for cars said:

I really like and appreciate your blog article.Really looking forward to read more. Fantastic.

# May 10, 2012 8:01 PM

bonus senza deposito said:

Hey, thanks for the article post.Really looking forward to read more. Will read on...

# May 10, 2012 9:42 PM

Christian Book Publishing said:

Very good blog article.Thanks Again. Fantastic.

# May 10, 2012 11:13 PM

Kelly Parisien said:

I am so grateful for your article.Thanks Again.

# May 11, 2012 12:14 AM

film cells said:

Great article post.Thanks Again. Keep writing.

# May 11, 2012 12:54 AM

Jamie Romanski said:

Im thankful for the blog.Really looking forward to read more. Much obliged.

# May 11, 2012 1:54 AM

Jamie Subia said:

I really enjoy the blog.Really looking forward to read more. Great.

# May 11, 2012 3:38 AM

Elinor Crupi said:

Fantastic blog.Really looking forward to read more. Really Great.

# May 11, 2012 4:17 AM

backup wii games said:

Muchos Gracias for your blog.Really looking forward to read more. Great.

# May 11, 2012 5:18 AM

Dimeo said:

A round of applause for your blog article. Will read on...

# May 11, 2012 7:00 AM

Submit URL said:

Im grateful for the article.Much thanks again. Keep writing.

# May 11, 2012 7:53 AM

Nelson Maltby said:

Looking forward to reading more. Great blog article.Thanks Again. Much obliged.

# May 11, 2012 8:40 AM

Guy Belli said:

Im obliged for the blog article.Thanks Again. Awesome.

# May 11, 2012 10:23 AM

Fernando Triggs said:

Thanks a lot for the blog post.Really looking forward to read more. Want more.

# May 11, 2012 11:05 AM

Kurt Lopp said:

Hey, thanks for the blog article.Much thanks again.

# May 11, 2012 12:06 PM

Lonnie Beirne said:

Great blog. Will read on...

# May 11, 2012 12:49 PM

Saundra Frankum said:

Thanks for the blog article.Much thanks again.

# May 11, 2012 2:29 PM

s&#252;dtirol italy said:

Very good blog post.Much thanks again. Will read on...

# May 11, 2012 3:28 PM

Plus said:

Major thankies for the article.Much thanks again. Awesome.

# May 11, 2012 4:12 PM

Dollie Brazzell said:

Major thanks for the article post.Really looking forward to read more. Want more.

# May 11, 2012 5:15 PM

air conditioning said:

I appreciate you sharing this post.Thanks Again. Much obliged.

# May 11, 2012 5:58 PM

tatuaggi farfalle said:

Enjoyed every bit of your blog.Really looking forward to read more. Keep writing.

# May 11, 2012 7:42 PM

www.streamtorrent.com said:

Appreciate you sharing, great blog post.Thanks Again. Great.

# May 11, 2012 9:24 PM

coin auctions said:

I really enjoy the post.Thanks Again. Really Cool.

# May 11, 2012 10:21 PM

germanlifehacks said:

Say, you got a nice post. Really Great.

# May 11, 2012 10:25 PM

cameron big sur said:

Im grateful for the blog.Thanks Again. Fantastic.

# May 11, 2012 11:07 PM

what happens when you quit smoking said:

Fantastic article post.Really looking forward to read more. Fantastic.

# May 12, 2012 12:02 AM

visita virtual said:

Thanks a lot for the blog.Really looking forward to read more. Awesome.

# May 12, 2012 12:50 AM

Model Agentur Schweiz said:

Say, you got a nice article post. Will read on...

# May 12, 2012 1:08 AM

tampa said:

Wow, great blog.Much thanks again. Will read on...

# May 12, 2012 1:51 AM

unique favors said:

Thanks for the blog. Will read on...

# May 12, 2012 2:49 AM

collection said:

Really enjoyed this post. Great.

# May 12, 2012 4:31 AM

Met said:

Appreciate you sharing, great article post.Thanks Again. Really Great.

# May 12, 2012 6:16 AM

Le Ouititi Est Dans La Place said:

Very good article.Much thanks again.

# May 12, 2012 8:01 AM

what said:

Thanks for the post.Really looking forward to read more. Will read on...

# May 12, 2012 9:45 AM

lingo-translation.com said:

A round of applause for your blog post.Thanks Again. Really Great.

# May 12, 2012 10:24 AM

click here said:

Really appreciate you sharing this post.Really looking forward to read more. Really Cool.

# May 12, 2012 12:11 PM

Spokane said:

A round of applause for your article post.Much thanks again. Fantastic.

# May 12, 2012 12:25 PM

anonymous wiki said:

I really like and appreciate your blog article. Awesome.

# May 12, 2012 1:59 PM

SEO said:

Im obliged for the blog post.Much thanks again. Great.

# May 12, 2012 2:13 PM

cheap prom dresses said:

I think this is a real great blog.Thanks Again. Much obliged.

# May 12, 2012 3:02 PM

card said:

Im grateful for the blog article.Much thanks again. Really Great.

# May 12, 2012 4:02 PM

Online Shop said:

I really enjoy the post.Much thanks again. Cool.

# May 12, 2012 4:47 PM

epic fantasy books said:

Looking forward to reading more. Great blog. Will read on...

# May 12, 2012 5:35 PM

boise seo said:

Thanks a lot for the article post.Thanks Again. Really Cool.

# May 12, 2012 5:48 PM

send efax said:

wow, awesome blog article. Will read on...

# May 12, 2012 7:21 PM

dise&#241;o web said:

Major thanks for the blog article. Much obliged.

# May 12, 2012 7:36 PM

handwriting expert said:

Thanks for the blog post.Much thanks again. Fantastic.

# May 12, 2012 8:19 PM

Software Testing said:

Say, you got a nice blog post.Much thanks again. Keep writing.

# May 12, 2012 9:07 PM

business screening said:

Really appreciate you sharing this article post. Great.

# May 12, 2012 10:52 PM

http://www.dinheirodeverdade.com/ said:

Thanks-a-mundo for the post.Much thanks again. Really Great.

# May 12, 2012 11:07 PM

Talisman said:

Great, thanks for sharing this post.Much thanks again.

# May 13, 2012 12:52 AM

Greensboro sushi said:

Fantastic blog.Really looking forward to read more.

# May 13, 2012 2:25 AM

springfield il remodeling said:

Great, thanks for sharing this blog. Will read on...

# May 13, 2012 2:39 AM

EB1A said:

Muchos Gracias for your post.Thanks Again. Will read on...

# May 13, 2012 4:15 AM

atlanta 24 hour dentist said:

I loved your blog article.Thanks Again. Awesome.

# May 13, 2012 5:09 AM

design said:

I appreciate you sharing this blog. Great.

# May 13, 2012 6:57 AM

starcraft 2 cheat said:

Major thanks for the article.Much thanks again. Will read on...

# May 14, 2012 3:34 AM

Chiropractor Mississauga said:

Very informative blog article.Much thanks again. Will read on...

# May 14, 2012 4:08 AM

��������� �� ���� said:

Major thanks for the post.Thanks Again. Really Great.

# May 14, 2012 6:55 AM

cheap said:

NljIco Very good article post.Much thanks again. Fantastic.

# May 14, 2012 7:27 AM

Orlando Bail Bonds said:

Appreciate you sharing, great blog article.Thanks Again.

# May 14, 2012 9:53 AM

tatuaggi fiori said:

This is one awesome article post.Really looking forward to read more. Really Cool.

# May 14, 2012 12:25 PM

private detective investigator said:

Great blog article.Really looking forward to read more. Really Cool.

# May 14, 2012 1:17 PM

Marguerita Concho said:

Thanks so much for the article post.Thanks Again. Great.

# May 14, 2012 2:15 PM

Tree Removal Houston said:

Really enjoyed this blog post.Much thanks again. Fantastic.

# May 14, 2012 3:21 PM

tory burch miller 2 sandals said:

I appreciate you sharing this article.Much thanks again. Great.

# May 14, 2012 7:42 PM

Nashville Tree Removal said:

I truly appreciate this article post.Much thanks again. Want more.

# May 14, 2012 10:24 PM

Rachel Kugel said:

Very good blog.Really looking forward to read more. Cool.

# May 14, 2012 11:18 PM

Emergency Baltimore Tree Removal said:

Muchos Gracias for your post. Fantastic.

# May 15, 2012 12:11 AM

find said:

Really informative article. Keep writing.

# May 15, 2012 2:32 AM

Flea treatments for dogs said:

Major thankies for the blog.Thanks Again. Want more.

# May 15, 2012 3:00 AM

northeastern said:

Major thankies for the article.Thanks Again. Fantastic.

# May 15, 2012 3:48 AM

a said:

Very informative article.Really looking forward to read more. Much obliged.

# May 15, 2012 8:34 AM

James Jouni said:

I loved your post.Really looking forward to read more. Want more.

# May 15, 2012 9:17 AM

wood hockey said:

I really enjoy the article. Cool.

# May 15, 2012 9:52 AM

trader said:

I really liked your blog.Thanks Again.

# May 15, 2012 10:26 AM

mini sticks said:

Really enjoyed this article.Really looking forward to read more. Cool.

# May 15, 2012 11:56 AM

flipping said:

Muchos Gracias for your post.Thanks Again. Keep writing.

# May 15, 2012 12:17 PM

iPhone said:

I am so grateful for your article.Much thanks again. Keep writing.

# May 15, 2012 1:00 PM

Bauer P91A Staal said:

Really enjoyed this blog post.

# May 15, 2012 3:59 PM

gifts for new grandparents from baby said:

I think this is a real great blog post. Will read on...

# May 15, 2012 7:41 PM

gifts for grandma said:

Muchos Gracias for your blog article.Much thanks again. Much obliged.

# May 15, 2012 9:30 PM

gifts for nanny on mothers day said:

Wow, great article post.Really looking forward to read more. Will read on...

# May 15, 2012 11:20 PM

best photo gifts for grandparents said:

I really liked your blog post. Keep writing.

# May 16, 2012 1:12 AM

1500 calorie diet cookbook said:

Major thanks for the article. Much obliged.

# May 16, 2012 3:04 AM

Affiliate Marketing Strategies said:

Fantastic blog post.Thanks Again.

# May 16, 2012 3:07 AM

cheap food delivery diets said:

Wow, great article.Really looking forward to read more. Really Great.

# May 16, 2012 4:52 AM

tigara electronica pret said:

Enjoyed every bit of your blog article.Much thanks again.

# May 16, 2012 4:54 AM

http://treatmentforshinglesnow.com said:

Very good article.Thanks Again. Cool.

# May 16, 2012 5:00 AM

healthy heart diet tips said:

Really appreciate you sharing this article. Much obliged.

# May 16, 2012 6:39 AM

dogs and aspirin said:

A round of applause for your blog article.Thanks Again. Awesome.

# May 16, 2012 6:41 AM

compare business gas said:

Very neat article. Awesome.

# May 16, 2012 6:48 AM

service said:

I am so grateful for your blog article.Really looking forward to read more. Cool.

# May 16, 2012 8:37 AM

www.erinedwards.com said:

Thanks-a-mundo for the blog article.Thanks Again. Really Great.

# May 16, 2012 12:18 PM

www.funandsafedriving.com said:

Really enjoyed this article.Really looking forward to read more. Fantastic.

# May 16, 2012 2:20 PM

��������� said:

Thanks for the blog.Really looking forward to read more.

# May 16, 2012 4:22 PM

www.printerinkcartridgescheapnow.com said:

Looking forward to reading more. Great blog article. Really Great.

# May 16, 2012 6:28 PM

www.speedingticketsbeater.com said:

Wow, great blog article.Really looking forward to read more. Awesome.

# May 16, 2012 8:31 PM

Here said:

Enjoyed every bit of your post. Keep writing.

# May 17, 2012 11:10 AM

scotty cameron golo mid said:

I appreciate you sharing this article post. Really Cool.

# May 17, 2012 2:09 PM

silver said:

Really appreciate you sharing this post.Thanks Again. Keep writing.

# May 17, 2012 2:57 PM

best electric scooters said:

I appreciate you sharing this article post.Much thanks again. Really Great.

# May 17, 2012 3:39 PM

adidas F50 adizero micoach said:

Really enjoyed this article. Great.

# May 17, 2012 5:58 PM

http://nybatcontrol.com said:

Thanks-a-mundo for the article.

# May 17, 2012 6:40 PM

fb coupon code said:

Thanks for the article post.Really looking forward to read more. Awesome.

# May 17, 2012 9:41 PM

pretty said:

Thanks so much for the post.Really looking forward to read more. Fantastic.

# May 17, 2012 10:31 PM

marlborough said:

Thanks for sharing, this is a fantastic blog.Thanks Again. Really Great.

# May 17, 2012 11:13 PM

exercises for muffin top said:

I value the article.Thanks Again. Want more.

# May 18, 2012 12:04 AM

get facebook fans said:

Thanks for the blog.Thanks Again. Really Cool.

# May 18, 2012 12:45 AM

Reality Networkers said:

Really appreciate you sharing this blog article.Thanks Again. Cool.

# May 18, 2012 2:18 AM

cake said:

I really like and appreciate your blog.Thanks Again. Awesome.

# May 18, 2012 3:51 AM

yeahgo said:

Im grateful for the post.Much thanks again. Fantastic.

# May 18, 2012 5:26 AM

Chiropractor Mississauga said:

Really enjoyed this blog. Keep writing.

# May 18, 2012 5:47 AM

led lighting said:

Thanks a lot for the blog.Much thanks again. Cool.

# May 18, 2012 6:21 AM

article marketing robot bonus said:

Looking forward to reading more. Great post.Thanks Again. Fantastic.

# May 18, 2012 11:55 AM

how to look slim and thin said:

A round of applause for your post.

# May 18, 2012 6:16 PM

best coffee said:

I think this is a real great blog article.Thanks Again. Will read on...

# May 18, 2012 9:29 PM

Lake Mary Bike Shop said:

Thanks for sharing, this is a fantastic blog.Really looking forward to read more. Great.

# May 21, 2012 5:18 AM

Green Tea Weight Loss said:

I am so grateful for your article post.Really looking forward to read more. Awesome.

# May 21, 2012 5:23 AM

zuluf said:

I appreciate you sharing this article.Much thanks again. Will read on...

# May 21, 2012 8:32 AM

adidas F50 adizero said:

A round of applause for your post.Really looking forward to read more. Fantastic.

# May 21, 2012 10:20 AM

cr&#233;ation site internet thonon said:

Very informative article.Really looking forward to read more. Fantastic.

# May 21, 2012 10:55 AM

Ljus said:

Major thanks for the post.Much thanks again. Great.

# May 21, 2012 11:45 AM

how do you get hemorrhoids said:

Really enjoyed this blog post.Really looking forward to read more.

# May 21, 2012 11:55 AM

proflightsimulator online said:

Very informative blog post.Really looking forward to read more. Much obliged.

# May 21, 2012 1:22 PM

wow power leveling said:

Awesome article post.Much thanks again. Awesome.

# May 21, 2012 1:32 PM

yorkshire said:

Awesome blog. Great.

# May 21, 2012 2:56 PM

Nike Mercurial Superfly III said:

Great blog article.Really looking forward to read more. Much obliged.

# May 21, 2012 3:09 PM

tracking nature said:

Major thanks for the post.Thanks Again. Fantastic.

# May 21, 2012 4:48 PM

oil change Medford Oregon said:

Enjoyed every bit of your article.Really looking forward to read more. Awesome.

# May 21, 2012 7:50 PM

Nike Mercurial Vapor VIII said:

I loved your blog article.Thanks Again. Will read on...

# May 21, 2012 8:02 PM

Mold testing Prtsmouth New Hampshire said:

Thanks for sharing, this is a fantastic post.Much thanks again. Awesome.

# May 21, 2012 9:27 PM

imbuygold.com said:

Really enjoyed this article post.Thanks Again. Want more.

# May 21, 2012 9:41 PM

Bathroom Sink Taps said:

Thanks a lot for the blog.Much thanks again.

# May 21, 2012 11:20 PM

brakes Ottawa Ontario said:

Thanks for the article post.Much thanks again. Really Cool.

# May 22, 2012 12:47 AM

Ralph Lauren Hoodies said:

Fantastic blog article.Really looking forward to read more.

# May 22, 2012 1:00 AM

vacuum cleaners Doylestown Pensylvania said:

wow, awesome article. Much obliged.

# May 22, 2012 2:26 AM

product homemade male enhancement said:

I loved your post.Really looking forward to read more. Awesome.

# May 22, 2012 2:41 AM

Short Wedding Dresses said:

I really like and appreciate your blog post.Much thanks again. Really Great.

# May 22, 2012 4:21 AM

wall panelling said:

Really appreciate you sharing this blog post.Really looking forward to read more. Much obliged.

# May 22, 2012 5:02 AM

outcall massage singapore said:

I appreciate you sharing this post.Much thanks again. Really Cool.

# May 22, 2012 6:38 AM

android tablet said:

I really enjoy the article.Much thanks again. Cool.

# May 22, 2012 8:16 AM

debt resources said:

Thanks again for the blog post. Great.

# May 22, 2012 9:07 AM

winning lottery strategies said:

Awesome post.Much thanks again. Awesome.

# May 22, 2012 9:45 AM

Video Surveillance Systems said:

Thanks so much for the blog post. Cool.

# May 22, 2012 9:56 AM

Dodge Ram Running Boards said:

I really liked your article post.Much thanks again. Fantastic.

# May 22, 2012 11:38 AM

buy music said:

I really enjoy the blog article.Thanks Again. Much obliged.

# May 22, 2012 1:20 PM

home said:

Im grateful for the article.Really looking forward to read more. Really Cool.

# May 22, 2012 2:13 PM

sticker said:

Awesome blog.Thanks Again. Great.

# May 22, 2012 2:53 PM

facebook likes said:

Major thankies for the post.Really looking forward to read more. Awesome.

# May 22, 2012 3:55 PM

treatment said:

Thanks for the blog. Really Great.

# May 22, 2012 6:11 PM

web said:

Thanks for the blog.Really looking forward to read more. Really Cool.

# May 22, 2012 8:00 PM

go here now said:

Im thankful for the article.Really looking forward to read more. Awesome.

# May 22, 2012 9:28 PM

click media said:

Really enjoyed this blog article.Really looking forward to read more. Much obliged.

# May 23, 2012 12:49 AM

Angeles. said:

Im grateful for the blog article.Much thanks again. Awesome.

# May 23, 2012 4:12 AM

back pain mississauga said:

I value the post.Really looking forward to read more. Want more.

# May 23, 2012 4:46 AM

Breast said:

I truly appreciate this blog.Thanks Again. Will read on...

# May 23, 2012 7:41 AM

erectile dysfunction treatment said:

Awesome post.Much thanks again. Awesome.

# May 23, 2012 7:51 AM

driver said:

Muchos Gracias for your article post.Much thanks again. Will read on...

# May 23, 2012 10:55 AM

vacuum attachment said:

Really informative article post.Much thanks again. Really Great.

# May 23, 2012 11:14 AM

airstream trailer said:

Im obliged for the post.Much thanks again. Cool.

# May 23, 2012 1:33 PM

sprachaufenthalt said:

I really liked your blog article.Much thanks again. Fantastic.

# May 23, 2012 3:52 PM

software said:

Major thanks for the blog article. Fantastic.

# May 23, 2012 5:32 PM

knullkontakter said:

Very good post. Awesome.

# May 23, 2012 5:52 PM

surt10000xlt said:

Really appreciate you sharing this post.Really looking forward to read more.

# May 23, 2012 6:40 PM

Docking Stations said:

Fantastic blog.Really looking forward to read more. Awesome.

# May 23, 2012 8:49 PM

francja zdj&#281;cia said:

Enjoyed every bit of your article. Much obliged.

# May 23, 2012 10:28 PM

legalize said:

This is one awesome article post. Cool.

# May 24, 2012 1:34 AM

www.ieec.edu.sg said:

Thanks for the article post.Much thanks again. Much obliged.

# May 24, 2012 4:05 AM

Auto Auctions said:

Im grateful for the article post.Really looking forward to read more. Much obliged.

# May 24, 2012 5:25 AM

general manufacturing said:

Muchos Gracias for your article.Much thanks again. Keep writing.

# May 24, 2012 6:00 AM

Cars For Sale said:

Really informative article.Much thanks again. Will read on...

# May 24, 2012 7:40 AM

positive singles said:

Awesome blog. Cool.

# May 24, 2012 9:22 AM

sites said:

Really enjoyed this blog.Much thanks again. Want more.

# May 24, 2012 10:04 AM

guildford said:

Awesome post.Thanks Again. Will read on...

# May 24, 2012 10:39 AM

Mystery Novels said:

Enjoyed every bit of your article post. Awesome.

# May 24, 2012 11:05 AM

computer said:

Im grateful for the blog article.Much thanks again. Will read on...

# May 24, 2012 12:25 PM

hydrocele treatment said:

I think this is a real great blog article.Much thanks again. Much obliged.

# May 24, 2012 12:48 PM

rolland winters said:

Very informative blog post.Really looking forward to read more. Really Great.

# May 24, 2012 3:55 PM

Deerfield Beach CPA said:

Very informative blog post.Really looking forward to read more. Want more.

# May 24, 2012 4:13 PM

photo application said:

I really enjoy the blog.Thanks Again.

# May 24, 2012 5:56 PM

investing said:

Thanks again for the post.Really looking forward to read more. Will read on...

# May 24, 2012 7:31 PM

bad credit credit card said:

Very informative blog post.Much thanks again. Want more.

# May 24, 2012 7:38 PM

in said:

I really liked your blog article.Much thanks again. Fantastic.

# May 24, 2012 9:17 PM

Sacramento said:

Thanks again for the article. Cool.

# May 24, 2012 9:21 PM

tax said:

I think this is a real great article.Thanks Again. Great.

# May 24, 2012 11:02 PM

Newport said:

Im thankful for the article.Thanks Again. Great.

# May 24, 2012 11:03 PM

bed said:

Really informative article post.Much thanks again.

# May 25, 2012 12:46 AM

tax said:

I think this is a real great blog article.Really looking forward to read more. Cool.

# May 25, 2012 12:47 AM

EB1 said:

Really informative article post.Thanks Again. Really Cool.

# May 25, 2012 2:28 AM

investing said:

Really appreciate you sharing this post.Really looking forward to read more. Really Great.

# May 25, 2012 2:33 AM

lien said:

Really appreciate you sharing this article.

# May 25, 2012 4:19 AM

Saskatchewan Business Directory said:

Thanks for sharing, this is a fantastic article. Keep writing.

# May 25, 2012 9:39 AM

Directed said:

Say, you got a nice blog. Will read on...

# May 25, 2012 1:11 PM

Software Gestionale said:

I really liked your blog. Much obliged.

# May 25, 2012 3:00 PM

ppi advice said:

Appreciate you sharing, great blog post. Really Cool.

# May 25, 2012 4:48 PM

rabbits toy said:

A round of applause for your post.Really looking forward to read more. Awesome.

# May 26, 2012 12:03 AM

resource said:

Im obliged for the article post.Really looking forward to read more. Fantastic.

# May 26, 2012 7:40 AM

Coffee said:

Looking forward to reading more. Great blog article.Much thanks again. Cool.

# May 26, 2012 9:01 AM

Florida said:

Appreciate you sharing, great article.Thanks Again. Really Cool.

# May 26, 2012 9:26 AM

Wine Gift said:

Looking forward to reading more. Great article. Great.

# May 26, 2012 11:06 AM

data recovery knutsford said:

Fantastic article.Really looking forward to read more. Awesome.

# May 26, 2012 11:11 AM

Online Birthday Cards said:

Major thanks for the article. Awesome.

# May 26, 2012 5:38 PM

Advantage Multi said:

Thanks a lot for the article. Really Great.

# May 26, 2012 7:48 PM

Innotek Dog Training Collar said:

I loved your blog.Really looking forward to read more. Cool.

# May 26, 2012 10:10 PM

Above Ground Pool said:

Really appreciate you sharing this blog.Thanks Again.

# May 27, 2012 12:21 AM

Wedding Stationary said:

I really like and appreciate your post.Much thanks again. Awesome.

# May 27, 2012 2:32 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)