views:

1500

answers:

3

Hey all,

Got a question. I have images hosted on my server. I already know of the method when an image is uploaded to resize it and save, but I have another thought in mind.

  1. I was wondering if there is a way to resize when the image is requested from the user. Not when it was uploaded by the user.

So for example a user goes to upload an image and I DO NOT RESIZE it and save another copy of the resized image. Instead, when the image is requested by the user via an ASP.NET img control/tag it would resize the image on the fly to display it and display it via the img tag/control.

Why would I want to do this?

To save on disk space. Most servers have a disk space limit, but not a server processing limit. So I would like to save on disk space and use the processing space instead.

EDIT: As a startup website its currently better that I save disk than saving processing time. I don't have much money for large amount of space at this moment. Hopefully it will change when the site launches.

Any ideas? Thanks guys and girls.

A: 

You can create an implementation of IHttpHandler to respond to image requests, in that handler you can have code that loads the image from disk and transforms to it a size that is needed. You need to return the proper mime type with the response, and use the WriteBytes method (or something like it, I forgot the name). Also, you may look into content expiration headers, so that the image may not have to be loaded every time by the same client, but is instead cached.

eulerfx
+2  A: 

Hey Scott,

I assume you can 'control' the urls to the resized images, so for example the full-sized image might be referenced as <img src="uploads/myphoto.jpg"/> the thumbnail could be to an ASPX or ASHX like <img src="uploads/myphoto.jpg.ashx"/>?

This article on CodeProject - Dynamic Image Resize seems to have exactly the source code you are looking for (and although it's in VB, it shouldn't be hard to port if you're a C# person). Hope that helps.

Finally, I'd encourage you consider the various forms of caching (both using Http-Headers, to ensure the images are cached at the client or proxy whenever possible; and using built-in ASP.NET features to avoid unnecessary processing of the same images over-and-over).

Although you'll be saving disk-quota, you're effectively slowing down every other page/request... just a thought.

CraigD
thanks. This seems to be exactly what I was looking for.
Scott
A: 

It is not really actual resize of image, it is rather resize when you display an image, but i used with success just simple

 <img src="myimage" height="height you want to give" width="width you want
 to give" alt="" />

It is working every time.

Dmitris
the problem with this is that the image if over a megabyte stays a mega byte. C# resizes the image so it doesn't actually stay a megabyte
Scott
True , it is just for the display, the actual image size stay same.
Dmitris