Compress Image to a Given Size in C#

  1. namespace HelperClass  
  2. {  
  3.     #region[Directive]  
  4.     using System;  
  5.     using System.Collections.Generic;  
  6.     using System.Linq;  
  7.     using System.Text;  
  8.     #endregion[Directive]  
  9.   
  10.     /// <summary>  
  11.     /// This class is used to get the constants  
  12.     /// </summary>  
  13.     public class CommonConstant  
  14.     {  
  15.         public const string JPEG = ".jpeg";  
  16.         public const string PNG = ".png";  
  17.         public const string JPG = ".jpg";  
  18.         public const string BTM = ".btm";  
  19.     }  

ImageCompress.CS
  1. namespace HelperClass  
  2. {  
  3.     #region[Directive]  
  4.     using System;  
  5.     using System.Collections.Generic;  
  6.     using System.Linq;  
  7.     using System.Drawing;  
  8.     using System.Drawing.Imaging;  
  9.     using System.IO;  
  10.     #endregion[Directive]  
  11.   
  12.     /// <summary>  
  13.     /// This class is used to compress the image to  
  14.     /// provided size  
  15.     /// </summary>  
  16.     public class ImageCompress  
  17.     {  
  18.         #region[PrivateData]  
  19.         private static volatile ImageCompress imageCompress;  
  20.         private Bitmap bitmap;  
  21.         private int width;  
  22.         private int height;  
  23.         private Image img;  
  24.         #endregion[Privatedata]  
  25.  
  26.         #region[Constructor]  
  27.         /// <summary>  
  28.         /// It is used to restrict to create the instance of the ImageCompress  
  29.         /// </summary>  
  30.         private ImageCompress()  
  31.         {  
  32.         }  
  33.         #endregion[Constructor]  
  34.  
  35.         #region[Poperties]  
  36.         /// <summary>  
  37.         /// Gets ImageCompress object  
  38.         /// </summary>  
  39.         public static ImageCompress GetImageCompressObject  
  40.         {  
  41.             get  
  42.             {  
  43.                 if (imageCompress == null)  
  44.                 {  
  45.                     imageCompress = new ImageCompress();  
  46.                 }  
  47.                 return imageCompress;  
  48.             }  
  49.         }  
  50.   
  51.         /// <summary>  
  52.         /// Gets or sets Width  
  53.         /// </summary>  
  54.         public int Height  
  55.         {  
  56.             get { return height; }  
  57.             set { height = value; }  
  58.         }  
  59.   
  60.         /// <summary>  
  61.         /// Gets or sets Width  
  62.         /// </summary>  
  63.         public int Width  
  64.         {  
  65.             get { return width; }  
  66.             set { width = value; }  
  67.         }  
  68.   
  69.         /// <summary>  
  70.         /// Gets or sets Image  
  71.         /// </summary>  
  72.         public Bitmap GetImage  
  73.         {  
  74.             get { return bitmap; }  
  75.             set { bitmap = value; }  
  76.         }  
  77.         #endregion[Poperties]  
  78.  
  79.         #region[PublicFunction]  
  80.         /// <summary>  
  81.         /// This function is used to save the image  
  82.         /// </summary>  
  83.         /// <param name="fileName"></param>  
  84.         /// <param name="path"></param>  
  85.         public void Save(string fileName, string path)  
  86.         {  
  87.             if (ISValidFileType(fileName))  
  88.             {  
  89.                 string pathaname = path + @"\" + fileName;  
  90.                 save(pathaname, 60);  
  91.             }  
  92.         }  
  93.         #endregion[PublicFunction]  
  94.  
  95.         #region[PrivateData]  
  96.         /// <summary>  
  97.         /// This function is use to compress the image to  
  98.         /// predefine size  
  99.         /// </summary>  
  100.         /// <returns>return bitmap in compress size</returns>  
  101.         private Image CompressImage()  
  102.         {  
  103.             if (GetImage != null)  
  104.             {  
  105.                 Width = (Width == 0) ? GetImage.Width : Width;  
  106.                 Height = (Height == 0) ? GetImage.Height : Height;  
  107.                 Bitmap newBitmap = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);  
  108.                 newBitmap = bitmap;  
  109.                 newBitmap.SetResolution(80, 80);  
  110.                 return newBitmap.GetThumbnailImage(Width, Height, null, IntPtr.Zero);  
  111.             }  
  112.             else  
  113.             {  
  114.                 throw new Exception("Please provide bitmap");  
  115.             }  
  116.         }  
  117.   
  118.         /// <summary>  
  119.         /// This function is used to check the file Type  
  120.         /// </summary>  
  121.         /// <param name="fileName">String data type:contain the file name</param>  
  122.         /// <returns>true or false on the file extention</returns>  
  123.         private bool ISValidFileType(string fileName)  
  124.         {  
  125.             bool isValidExt = false;  
  126.             string fileExt = Path.GetExtension(fileName);  
  127.             switch (fileExt.ToLower())  
  128.             {  
  129.                 case CommonConstant.JPEG:  
  130.                 case CommonConstant.BTM:  
  131.                 case CommonConstant.JPG:  
  132.                 case CommonConstant.PNG:  
  133.                     isValidExt = true;  
  134.                     break;  
  135.             }  
  136.             return isValidExt;  
  137.         }  
  138.   
  139.         /// <summary>  
  140.         /// This function is used to get the imageCode info  
  141.         /// on the basis of mimeType  
  142.         /// </summary>  
  143.         /// <param name="mimeType">string data type</param>  
  144.         /// <returns>ImageCodecInfo data type</returns>  
  145.         private ImageCodecInfo GetImageCoeInfo(string mimeType)  
  146.         {  
  147.             ImageCodecInfo[] codes = ImageCodecInfo.GetImageEncoders();  
  148.             for (int i = 0; i < codes.Length; i++)  
  149.             {  
  150.                 if (codes[i].MimeType == mimeType)  
  151.                 {  
  152.                     return codes[i];  
  153.                 }  
  154.             }  
  155.             return null;  
  156.         }  
  157.   
  158.         /// <summary>  
  159.         /// this function is used to save the image into a  
  160.         /// given path  
  161.         /// </summary>  
  162.         /// <param name="path">string data type</param>  
  163.         /// <param name="quality">int data type</param>  
  164.         private void save(string path, int quality)  
  165.         {  
  166.             img = CompressImage();  
  167.             ////Setting the quality of the picture  
  168.             EncoderParameter qualityParam =  
  169.             new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);  
  170.             ////Seting the format to save  
  171.             ImageCodecInfo imageCodec = GetImageCoeInfo("image/jpeg");  
  172.             ////Used to contain the poarameters of the quality  
  173.             EncoderParameters parameters = new EncoderParameters(1);  
  174.             parameters.Param[0] = qualityParam;  
  175.             ////Used to save the image to a given path  
  176.             img.Save(path, imageCodec, parameters);  
  177.         }  
  178.         #endregion[PrivateData]  
  179.     }  

Default.aspx.cs
  1. using System;  
  2. using System.Configuration;  
  3. using System.Data;  
  4. using System.Linq;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.HtmlControls;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using HelperClass;  
  12. using System.Xml.Linq;  
  13.   
  14. public partial class _Default : System.Web.UI.Page  
  15. {  
  16.     protected void Page_Load(object sender, EventArgs e)  
  17.     {  
  18.     }  
  19.     protected void Save_Click(object sender, EventArgs e)  
  20.     {  
  21.         ImageCompress imgCompress = ImageCompress.GetImageCompressObject;  
  22.         imgCompress.GetImage = new System.Drawing.Bitmap(upload1.FileContent);  
  23.         imgCompress.Height = 60;  
  24.         imgCompress.Width = 128;  
  25.         imgCompress.Save(upload1.FileName, @"C:\Documents and Settings\Rasmi\My Documents\Visual Studio2008\WebSites\compressImageFile\Logo");  
  26.     }  

 Default.aspx
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"Inherits="_Default" %>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4.    <head runat="server">  
  5.       <link href="CSS/Default.css" rel="stylesheet" type="text/css" />  
  6.       <title>Upload Image</title>  
  7.    </head>  
  8.    <body>  
  9.       <form id="form1" runat="server">  
  10.          <div>  
  11.             <table>  
  12.                <tr>  
  13.                   <td colspan="2">  
  14.                      <asp:Image ID="LogoImage" ImageUrl="~/Logo/rahulphoto1.JPG" runat="server" />  
  15.                   </td>  
  16.                </tr>  
  17.                <tr>  
  18.                   <td>Upload Logo:</td>  
  19.                    <td><asp:FileUpload ID="upload1" runat="server" /></td>  
  20.                </tr>  
  21.                <tr>  
  22.                   <td align="center" colspan="2">  
  23.                      <asp:Button CssClass="button" ID="Save" runat="server" Text="Save"  
  24.                         onclick="Save_Click" />  
  25.                   </td>  
  26.                </tr>  
  27.             </table>  
  28.          </div>  
  29.       </form>  
  30.    </body>  
  31. </html>