欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#圖片處理如何生成縮略圖的實現(xiàn)

 更新時間:2023年02月07日 10:35:15   作者:憂郁的蛋~  
本文主要介紹了C#圖片處理如何生成縮略圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

縮略圖通常是將圖片內容進行一定的縮小展現(xiàn),或裁剪展現(xiàn),主要有兩個目的,一是提供一定的預覽功能,二是節(jié)省屏幕展示空間、節(jié)省流量。
在網站中我們通常運用在商品的列表,比如商城、圖書、新聞等等列表的圖片。在C#中我們如何生成縮略圖呢,也就是縮小圖片,下面我們來看一看如何縮小圖片。

其中方法參數(shù)如下:

  • originalImagePath:源圖路徑(物理路徑)
  • thumbnailPath:縮略圖路徑(物理路徑)
  • width:生成縮略圖寬度
  • height:生成縮略圖高度
  • mode:生成縮略圖的模式

代碼如下

 
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode)
        {
            System.Drawing.Image img_OriginalImage = null;
            ImageFormat tFormat = null;
            try
            {
                img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath);
                tFormat = img_OriginalImage.RawFormat;
            }
            catch (Exception ex)
            {
                if (img_OriginalImage != null)
                {
                    img_OriginalImage.Dispose();
                }
               
                throw new Exception("壓縮圖片:" + originalImagePath + "失?。r\n" + ex.Message);
 
            }
 
            int i_ToWidth = width;
            int i_ToHeight = height;
 
            int x = 0;
            int y = 0;
 
            int i_OriginalWidth = img_OriginalImage.Width;
            int i_OriginalHeight = img_OriginalImage.Height;
 
            switch (mode)
            {
                case ThumbnailMode.Width:
                    i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width;
                    break;
                case ThumbnailMode.Height:
                    i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height;
                    break;
                case ThumbnailMode.Cut:
                    if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight)
                    {
                        i_OriginalHeight = img_OriginalImage.Height;
                        i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight;
                        y = 0;
                        x = (img_OriginalImage.Width - i_OriginalWidth) / 2;
                    }
                    else
                    {
                        i_OriginalWidth = img_OriginalImage.Width;
                        i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth;
                        x = 0;
                        y = (img_OriginalImage.Height - i_OriginalHeight) / 2;
                    }
                    break;
                default:
                    break;
            }
 
            //新建一個BMP圖片
            System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);
            //新建一個畫板
            System.Drawing.Graphics gp = Graphics.FromImage(img_BitMap);
            //設置高質量插值法
            gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            //設置高質量、低速度呈現(xiàn)平滑程度
            gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            gp.CompositingQuality = CompositingQuality.HighQuality;
 
            //清空畫布并以透明背景色填充
            gp.Clear(Color.Transparent);
            //指定位置并按大小繪制原圖片的指定部分
            gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel);
 
            try
            {
                EncoderParameters ep = new EncoderParameters();
                long[] qy = new long[1];
                qy[0] = 100;//設置壓縮的比例1-100  
                EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
                ep.Param[0] = eParam;
 
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo jpegICIinfo = null;
                for (int i = 0; i < arrayICI.Length; i++)
                {
                    if (arrayICI[i].FormatDescription.Equals("JPEG"))
                    {
                        jpegICIinfo = arrayICI[i];
                        break;
                    }
                }
                if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg))
                {
                    //以JPG格式保存圖片
                    img_BitMap.Save(thumbnailPath, jpegICIinfo, ep);
                    //Const.iSuccessCount++;
                }
                else
                {
                    img_BitMap.Save(thumbnailPath, tFormat);
                    //Const.iSuccessCount++;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("復制圖片:" + originalImagePath + "失敗!\r\n" + ex.Message + ex.StackTrace);
            }
            finally
            {
                if (img_OriginalImage != null)
                {
                    img_OriginalImage.Dispose();
                }
                if (img_BitMap != null)
                {
                    img_BitMap.Dispose();
                }
                if (gp != null)
                {
                    gp.Dispose();
                }
                //GC.Collect();
            }
        }
public enum ThumbnailMode
    {
        /// <summary>
        /// 指定寬度,高度按照比例縮放
        /// </summary>
        Width = 0,
 
        /// <summary>
        /// 指定高度,寬度按照比例縮放
        /// </summary>
        Height = 1,
 
        /// <summary>
        /// 按照指定的高度和寬度剪裁
        /// </summary>
        Cut = 2,
 
        /// <summary>
        /// 指定寬度,高度按照比例縮放
        /// </summary>
        None = 3
    }

在該方法中我們首先使用(Bitmap)System.Drawing.Image.FromFile將文件加載到bitmap。
根據mode傳入的壓縮模式進行原始繪圖區(qū)域的計算。
將計算出的區(qū)域繪制到新的BitMap。
將繪制的BitMap圖片保存到指定文件。
通過如上的幾步就完成了縮略圖的生成。

到此這篇關于C#圖片處理如何生成縮略圖的實現(xiàn)的文章就介紹到這了,更多相關C# 生成縮略圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • .Net WInform開發(fā)筆記(五)關于事件Event

    .Net WInform開發(fā)筆記(五)關于事件Event

    我前面幾篇博客中提到過.net中的事件與Windows事件的區(qū)別,本文討論的是前者,也就是我們代碼中經常用到的Event,感興趣的朋友可以了解下
    2013-01-01
  • C#判斷語句的表達式樹實現(xiàn)

    C#判斷語句的表達式樹實現(xiàn)

    這篇文章介紹了C#判斷語句的表達式樹實現(xiàn),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • c#如何利用定時器自動備份數(shù)據庫詳解

    c#如何利用定時器自動備份數(shù)據庫詳解

    在開發(fā)過程當中,你一定遇到文件損壞活或丟失的煩惱,而每天備份又很麻煩,你只要設置每天備份的時間,并將程序加入啟動項中,就可以自動完成備份,這篇文章主要給大家介紹了關于c#如何利用定時器自動備份數(shù)據庫的相關資料,需要的朋友可以參考下
    2021-10-10
  • C# 解壓gizp文件(.tgz)的實例

    C# 解壓gizp文件(.tgz)的實例

    下面小編就為大家分享一篇C# 解壓gizp文件(.tgz)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • FileShare枚舉的使用小結(文件讀寫鎖)

    FileShare枚舉的使用小結(文件讀寫鎖)

    其實/FileShare就是控制文件流的“訪問權限”,當然,這僅僅是入門的文件操作,自己做了筆記,也希望能給大家?guī)韼椭?/div> 2014-01-01
  • C#基于JsonConvert解析Json數(shù)據的方法實例

    C#基于JsonConvert解析Json數(shù)據的方法實例

    最近初接觸C#語言,發(fā)現(xiàn)JSON解析這塊和JAVA差異過大,下面這篇文章主要給大家介紹了關于C#基于JsonConvert解析Json數(shù)據的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • VMS中解協(xié)議常用方法備忘(小結)

    VMS中解協(xié)議常用方法備忘(小結)

    這篇文章主要介紹了VMS中解協(xié)議常用方法備忘(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • C# 實現(xiàn)基于ADO.NET框架的DBHelper工具類(簡化數(shù)據庫操作)

    C# 實現(xiàn)基于ADO.NET框架的DBHelper工具類(簡化數(shù)據庫操作)

    ADO.NET是.NET框架中用于與數(shù)據庫交互的核心組件,提供了一套用于連接數(shù)據庫、執(zhí)行SQL查詢、插入、更新和刪除數(shù)據的類庫,包括SqlConnection、SqlCommand、SqlDataReader等,本文介紹如何使用DBHelper類封裝數(shù)據庫操作,以提高代碼的可維護性和復用性,感興趣的朋友一起看看吧
    2024-08-08
  • Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    這篇文章主要為大家介紹了Winform?控件優(yōu)化LayeredWindow實現(xiàn)無鋸齒圓角窗體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • C#+無unsafe的非托管大數(shù)組示例詳解(large unmanaged array in c# without ‘unsafe’ keyword)

    C#+無unsafe的非托管大數(shù)組示例詳解(large unmanaged array in c# without ‘u

    這篇文章主要給大家介紹了關于C#+無unsafe的非托管大數(shù)組(large unmanaged array in c# without 'unsafe' keyword)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論