Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Krummelz/6376045 to your computer and use it in GitHub Desktop.
Save Krummelz/6376045 to your computer and use it in GitHub Desktop.
Just call "ProcessImageAndItsThumbnail" with your newly uploaded image's URL, and it will resize it for you, and make a thumbnail as well. Just remember to set the sizes you want for these new images.
protected void ProcessImageAndItsThumbnail(string url)
{
//make memory streams to work with the image bytes
MemoryStream imageStream = new MemoryStream();
MemoryStream thumbStream = new MemoryStream();
//using, so resources get disposed automagically
//using the uploaded image (which might be huge)
using (System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath(url)))
{
//for the new resized image
System.Drawing.Image newImage;
//if the size is greater than 600 x 450, scale it down
if ((img.Size.Width > 600) && (img.Size.Height > 450))
{
newImage = img.GetThumbnailImage(600, 450, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), System.IntPtr.Zero);
}
else
newImage = img;
//and then create a thumbnail too
System.Drawing.Image thumb = img.GetThumbnailImage(200, 150, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), System.IntPtr.Zero);
//for the new image
Graphics g = Graphics.FromImage(newImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
g.DrawImage(img, 0, 0, newImage.Width, newImage.Height);
//for the thumbnail
Graphics gT = Graphics.FromImage(thumb);
gT.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
gT.DrawImage(img, 0, 0, thumb.Width, thumb.Height);
//put the images into the memory streams
newImage.Save(imageStream, ImageFormat.Jpeg);
thumb.Save(thumbStream, ImageFormat.Jpeg);
}
//then, using a filestream, we write the file back to the same location, for the scaled down file
int bufferSize = 32;
byte[] buffer = new byte[bufferSize];
long savedLength = 0;
long imgLength = imageStream.Length;
using (FileStream fs = new FileStream(Server.MapPath(url), FileMode.Create))
{
//write it back
imageStream.Position = 0;
while (savedLength < imgLength)
{
int bytes = imageStream.Read(buffer, 0, bufferSize);
fs.Write(buffer, 0, bytes);
savedLength += bytes;
}
}
//and for the thumbnail
savedLength = 0;
imgLength = thumbStream.Length;
//make a new URL for the thumbnail to be saved to
string extention = url.Substring(url.Length - 4, 4);
string thumb_url = url.Substring(0, url.Length - 4) + "_thumb" + extention;
//save the thumbnail
using (FileStream fs = new FileStream(Server.MapPath(thumb_url), FileMode.Create))
{
//write it back
thumbStream.Position = 0;
while (savedLength < imgLength)
{
int bytes = thumbStream.Read(buffer, 0, bufferSize);
fs.Write(buffer, 0, bytes);
savedLength += bytes;
}
}
}
protected bool ThumbnailCallback()
{
return true; //can't remember why this is here
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment