C:\Images\MyImage_thumb_750.png
const string file = @"C:\Images\MyImage.png"; var f = new ImageFile(file); f.SaveThumbnail(0.75);
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; public class ImageFile { public string FileName { get; private set; } public ImageFile(string fileName) { FileName = fileName; } public void SaveThumbnail(double factor) { var img = Image.FromFile(FileName); var width = (int)Math.Ceiling(img.Width * factor); var height = (int)Math.Ceiling(img.Height * factor); var thumb = img.GetThumbnailImage(width, height, new Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero); var imageStream = new MemoryStream(); thumb.Save(imageStream, ImageFormat); var imageContent = new byte[imageStream.Length]; imageStream.Position = 0; imageStream.Read(imageContent, 0, (int)imageStream.Length); File.WriteAllBytes(GetThumbnailFileName(FileName, factor), imageContent); } public ImageFormat ImageFormat { get { var ext = Path.GetExtension(FileName).Substring(1).ToUpper(); switch(ext) { case "BMP": return ImageFormat.Bmp; case "EMF": return ImageFormat.Emf; case "GIF": return ImageFormat.Gif; case "ICO": return ImageFormat.Icon; case "JPEG": return ImageFormat.Jpeg; case "JPG": return ImageFormat.Jpeg; case "JPE": return ImageFormat.Jpeg; case "JFIF": return ImageFormat.Jpeg; case "PNG": return ImageFormat.Png; case "TIFF": return ImageFormat.Tiff; case "TIF": return ImageFormat.Tiff; case "WMF": return ImageFormat.Wmf; default: throw new Exception("Invalid file type: " + ext); } } } /*= Private Members =====================================================================*/ private bool ThumbnailCallback() { return true; } /*= Static Members ======================================================================*/ public static string GetThumbnailFileName(string fileName, double factor) { var dir = Path.GetDirectoryName(fileName); var name = Path.GetFileNameWithoutExtension(fileName); var ext = Path.GetExtension(fileName); var f = Math.Round(factor * 1000, 0).ToString(); return Path.Combine(dir, name + "_thumb_" + f + ext); } }
/// <summary> /// Creates a thumbnail image from a file spec in the calling URL. /// </summary> public class MakeThumbnail : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // get the file name -- fall800.jpg string file = Request.QueryString["file"]; // create an image object, using the filename we just retrieved System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath(file)); // create the actual thumbnail image System.Drawing.Image thumbnailImage = image.GetThumbnailImage(64, 64, new System.Drawing.Image.GetThumbnailImageAbort( ThumbnailCallback), IntPtr.Zero); // make a memory stream to work with the image bytes MemoryStream imageStream = new MemoryStream(); // put the image into the memory stream thumbnailImage.Save(imageStream, System.Drawing.Imaging.Imageformat.Jpeg); // make byte array the same size as the image byte[] imageContent = new Byte[imageStream.Length]; // rewind the memory stream imageStream.Position = 0; // load the byte array with the image imageStream.Read(imageContent, 0, (int)imageStream.Length); // return byte array to caller with image type Response.ContentType = "image/jpeg"; Response.BinaryWrite(imageContent); } /// <summary> /// Required, but not used /// </summary> /// <returns>true</returns> public bool ThumbnailCallback() { return true; } // ... non-applicable infrastructure code removed for clarity ... }