最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

其中方法參數(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;
            }
 
            //新建一個(gè)BMP圖片
            System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);
            //新建一個(gè)畫板
            System.Drawing.Graphics gp = Graphics.FromImage(img_BitMap);
            //設(shè)置高質(zhì)量插值法
            gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            //設(shè)置高質(zhì)量、低速度呈現(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;//設(shè)置壓縮的比例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("復(fù)制圖片:" + 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。
根據(jù)mode傳入的壓縮模式進(jìn)行原始繪圖區(qū)域的計(jì)算。
將計(jì)算出的區(qū)域繪制到新的BitMap。
將繪制的BitMap圖片保存到指定文件。
通過如上的幾步就完成了縮略圖的生成。

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

相關(guān)文章

  • CPF?使用C#的Native?AOT?發(fā)布程序的詳細(xì)過程

    CPF?使用C#的Native?AOT?發(fā)布程序的詳細(xì)過程

    這篇文章主要介紹了CPF?使用C#的Native?AOT?發(fā)布程序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具體一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 深入淺析Restful接口的兩種使用方式

    深入淺析Restful接口的兩種使用方式

    restful接口常用的兩種方式是get和post.接下來(lái)通過本文給大家介紹Restful接口的兩種使用方式,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-09-09
  • C#心跳機(jī)制客戶端的實(shí)現(xiàn)示例

    C#心跳機(jī)制客戶端的實(shí)現(xiàn)示例

    本文主要介紹了C#心跳機(jī)制客戶端,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解

    C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解

    這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C#實(shí)現(xiàn)一個(gè)簡(jiǎn)單實(shí)用的TXT文本操作及日志框架詳解

    C#實(shí)現(xiàn)一個(gè)簡(jiǎn)單實(shí)用的TXT文本操作及日志框架詳解

    這篇文章主要給大家介紹了關(guān)于利用C#如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單實(shí)用的TXT文本操作及日志框架的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們一起來(lái)看看吧
    2018-07-07
  • 淘寶IP地址庫(kù)采集器c#代碼

    淘寶IP地址庫(kù)采集器c#代碼

    這篇文章主要介紹了淘寶IP地址庫(kù)采集器c#代碼,有需要的朋友可以參考一下
    2013-12-12
  • C#中StringBuilder用法以及和String的區(qū)別分析

    C#中StringBuilder用法以及和String的區(qū)別分析

    當(dāng)我們?cè)诔鯇W(xué)使用C#時(shí),常常會(huì)不知道該用StringBuilder合適還是用String高效,下面是我在學(xué)習(xí)當(dāng)中對(duì)StringBuilder和String的區(qū)別總結(jié),分享給大家。
    2013-03-03
  • C#值類型、引用類型中的Equals和==的區(qū)別淺析

    C#值類型、引用類型中的Equals和==的區(qū)別淺析

    這篇文章主要介紹了C#值類型、引用類型中的Equals和==的區(qū)別淺析,本文分別對(duì)C#值類型和引用類型中的Equals和==做了講解和給出了實(shí)例,需要的朋友可以參考下
    2015-01-01
  • 探秘C# 6.0 的新特性

    探秘C# 6.0 的新特性

    本文的內(nèi)容包括引入C#6.0中的新的語(yǔ)言特性有哪些. 還有已經(jīng)被引入的代碼名稱為 “Roslyn”新編譯器. 編譯器是開放源碼的,并且可以從 codeplex 網(wǎng)站的這個(gè)地址下載到源代碼:https://roslyn.codeplex.com/.
    2015-03-03
  • Unity利用UGUI制作提示框效果

    Unity利用UGUI制作提示框效果

    這篇文章主要為大家詳細(xì)介紹了Unity利用UGUI制作提示框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評(píng)論

襄汾县| 普格县| 泰来县| 南靖县| 日土县| 库尔勒市| 长汀县| 岱山县| 灵石县| 民和| 贵南县| 肇庆市| 庆元县| 黄大仙区| 潮安县| 霍山县| 麦盖提县| 香格里拉县| 巢湖市| 棋牌| 化州市| 呼玛县| 富平县| 石台县| 永寿县| 象山县| 巧家县| 通榆县| 常德市| 北辰区| 中山市| 芷江| 昌邑市| 嘉义县| 浦江县| 阳东县| 德令哈市| 青田县| 建始县| 岗巴县| 右玉县|