Created
August 29, 2013 09:27
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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