程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 生成圖片縮略圖

C# 生成圖片縮略圖

編輯:C#入門知識

C# 生成圖片縮略圖


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

為了解決這個問題,決定采用縮略圖的方法。保存數據的時候保存原圖和其縮略圖。但主界面展示的時候只加載縮略圖,點擊縮略圖後再顯示其原圖。這樣就避免了一進入主界面就加載大量數據,提高了效率。

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

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

using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

///    
/// 圖片處理類   
/// 1、生成縮略圖片或按照比例改變圖片的大小和畫質   
/// 2、將生成的縮略圖放到指定的目錄下   
///    
public class ImageClass
{
    public Image ResourceImage;
    private int ImageWidth;
    private int ImageHeight;

    public string ErrMessage;

    ///    
    /// 類的構造函數   
    ///    
    /// 圖片文件的全路徑名稱   
    public ImageClass(string ImageFileName)
    {
        ResourceImage = Image.FromFile(ImageFileName);
        ErrMessage = "";
    }

    public bool ThumbnailCallback()
    {
        return false;
    }

    ///    
    /// 生成縮略圖重載方法1,返回縮略圖的Image對象   
    ///    
    /// 縮略圖的寬度   
    /// 縮略圖的高度   
    /// 縮略圖的Image對象   
    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;
        }
    }

    ///    
    /// 生成縮略圖重載方法2,將縮略圖文件保存到指定的路徑   
    ///    
    /// 縮略圖的寬度   
    /// 縮略圖的高度   
    /// 縮略圖保存的全文件名,(帶路徑),參數格式:D:Images ilename.jpg   
    /// 成功返回true,否則返回false   
    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;
        }
    }

    ///    
    /// 生成縮略圖重載方法3,返回縮略圖的Image對象   
    ///    
    /// 縮略圖的寬度百分比 如:需要百分之80,就填0.8     
    /// 縮略圖的Image對象   
    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;
        }
    }

    ///    
    /// 生成縮略圖重載方法4,返回縮略圖的Image對象   
    ///    
    /// 縮略圖的寬度百分比 如:需要百分之80,就填0.8     
    /// 縮略圖保存的全文件名,(帶路徑),參數格式:D:Images ilename.jpg   
    /// 成功返回true,否則返回false   
    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<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHAgbGFuZz0="en-US">

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved