C# 產生圖片縮圖

來源:互聯網
上載者:User

標籤:圖片處理   縮圖   c#   image   

    最近項目有部分需求,是關於圖片操作部分的, 大致的功能就是圖片的儲存和展示。但是直接操作原圖,程式運行效率太慢。而且如果傳輸資料量過大的話,可能直接導致調用WCF服務失敗的問題。

    為瞭解決這個問題,決定採用縮圖的方法。儲存資料的時候儲存原圖和其縮圖。但主介面展示的時候只載入縮圖,點擊縮圖後再顯示其原圖。這樣就避免了一進入主介面就載入大量資料,提高了效率。

    那麼問題就來了,怎麼將原圖進行處理變成縮圖呢?

    下面提供了一個圖片處理的類,用來產生縮圖。對GetReducedImage函數進行4次重載來完成不同的需求。

using System.IO;using System.Drawing;using System.Drawing.Imaging;/// <summary>   /// 圖片處理類   /// 1、產生縮圖片或按照比例改變圖片的大小和畫質   /// 2、將產生的縮圖放到指定的目錄下   /// </summary>   public class ImageClass{    public Image ResourceImage;    private int ImageWidth;    private int ImageHeight;    public string ErrMessage;    /// <summary>       /// 類的建構函式       /// </summary>       /// <param name="ImageFileName">圖片檔案的全路徑名稱</param>       public ImageClass(string ImageFileName)    {        ResourceImage = Image.FromFile(ImageFileName);        ErrMessage = "";    }    public bool ThumbnailCallback()    {        return false;    }    /// <summary>       /// 產生縮圖重載方法1,返回縮圖的Image對象       /// </summary>       /// <param name="Width">縮圖的寬度</param>       /// <param name="Height">縮圖的高度</param>       /// <returns>縮圖的Image對象</returns>       public Image GetReducedImage(int Width, int Height)    {        try        {            Image ReducedImage;            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);            ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);            return ReducedImage;        }        catch (Exception e)        {            ErrMessage = e.Message;            return null;        }    }    /// <summary>       /// 產生縮圖重載方法2,將縮圖檔案儲存到指定的路徑       /// </summary>       /// <param name="Width">縮圖的寬度</param>       /// <param name="Height">縮圖的高度</param>       /// <param name="targetFilePath">縮圖儲存的全檔案名稱,(帶路徑),參數格式:D:Images ilename.jpg</param>       /// <returns>成功返回true,否則返回false</returns>       public bool GetReducedImage(int Width, int Height, string targetFilePath)    {        try        {            Image ReducedImage;            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);            ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);            ReducedImage.Dispose();            return true;        }        catch (Exception e)        {            ErrMessage = e.Message;            return false;        }    }    /// <summary>       /// 產生縮圖重載方法3,返回縮圖的Image對象       /// </summary>       /// <param name="Percent">縮圖的寬度百分比 如:需要百分之80,就填0.8</param>         /// <returns>縮圖的Image對象</returns>       public Image GetReducedImage(double Percent)    {        try        {            Image ReducedImage;            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);            ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);            ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);            ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);            return ReducedImage;        }        catch (Exception e)        {            ErrMessage = e.Message;            return null;        }    }    /// <summary>       /// 產生縮圖重載方法4,返回縮圖的Image對象       /// </summary>       /// <param name="Percent">縮圖的寬度百分比 如:需要百分之80,就填0.8</param>         /// <param name="targetFilePath">縮圖儲存的全檔案名稱,(帶路徑),參數格式:D:Images ilename.jpg</param>       /// <returns>成功返回true,否則返回false</returns>       public bool GetReducedImage(double Percent, string targetFilePath)    {        try        {            Image ReducedImage;            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);            ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);            ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);            ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);            ReducedImage.Dispose();            return true;        }        catch (Exception e)        {            ErrMessage = e.Message;            return false;        }    }}


                                  

用GetReducedImage(double Percent)方法測試了一下,傳入縮減百分比為 0.05

 

原圖大小為1M,處理後的圖片大小僅幾十KB,程式運行效率的確提高了不少。

 

C# 產生圖片縮圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.