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

C#完成對圖片文件的緊縮、裁剪操作實例

編輯:C#入門知識

C#完成對圖片文件的緊縮、裁剪操作實例。本站提示廣大學習愛好者:(C#完成對圖片文件的緊縮、裁剪操作實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成對圖片文件的緊縮、裁剪操作實例正文


本文實例講述了C#對圖片文件的緊縮、裁剪操作辦法,在C#項目開辟中異常有適用價值。分享給年夜家供年夜家參考。詳細以下:

普通在做項目時,對圖片的處置,之前都采取在上傳時,限制其年夜小的方法,如許帶來諸多未便。究竟網站運維人員紛歧定會對圖片做處置,常常超越年夜小限制,即便會應用圖片處置軟件的,也因為小我程度方面緣由,處置後果差能人意。

因而采取C#為我們供給的圖象編纂功效,完成一站式上傳,經由過程法式生成所需年夜小、尺寸的目的圖片。

詳細步調以下:

先說圖片緊縮:

第一步:須要讀取一個圖片文件,讀取辦法:

// <param name="ImageFilePathAndName">圖片文件的全途徑稱號</param> 
public Image ResourceImage =Image.FromFile(ImageFilePathAndName); 

解釋:

Image類:援用自System.Drawing,為源自 Bitmap 和 Metafile 的類供給功效的籠統基類。

重要屬性:Size->獲得此圖象的以像素為單元的寬度和高度。

PhysicalDimension->獲得此圖象的寬度和高度(假如該圖象是位圖,以像素為單元前往寬度和高度。假如該圖象是圖元文件,則以0.01 毫米為單元前往寬度和高度。)。

PixelFormat->獲得此 Image 的像素格局。

Height、Width->獲得此 Image 的高度、寬度(以像素為單元)。

重要辦法:FromFile(String)->從指定的文件創立 Image。

FromStream(Stream)->從指定的數據流創立 Image。

Save(String fileName)->將該 Image 保留到指定的文件或流。

Save(Stream, ImageFormat)->將此圖象以指定的格局保留到指定的流中。

Save(String, ImageFormat)->將此 Image 以指定格局保留到指定文件。

更多屬性和辦法解釋請點擊。

第二步,生成縮略圖,而且將原圖內容按指定年夜小繪制到目的圖片。

/// <summary> 
/// 生成縮略圖重載辦法1,前往縮略圖的Image對象 
/// </summary> 
/// <param name="Width">縮略圖的寬度</param> 
/// <param name="Height">縮略圖的高度</param> 
/// <returns>縮略圖的Image對象</returns> 
public Image GetReducedImage(int Width, int Height) 
{ 
  try 
  { 
 //用指定的年夜小和格局初始化Bitmap類的新實例 
 Bitmap bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb); 
 //從指定的Image對象創立新Graphics對象 
 Graphics graphics = Graphics.FromImage(bitmap); 
 //消除全部畫圖面並以通明配景色填充 
 graphics.Clear(Color.Transparent); 
 //在指定地位而且按指定年夜小繪制原圖片對象 
 graphics.DrawImage(ResourceImage, new Rectangle(0, 0, Width, Height)); 
 return bitmap; 
  } 
  catch (Exception e) 
  { 
 ErrMessage = e.Message; 
 return null; 
  } 
} 

解釋:

1、Bitmap類

援用自System.Drawing,封裝 GDI+ 位圖,此位圖由圖形圖象及其特征的像素數據構成。Bitmap 是用於處置由像素數據界說的圖象的對象。

關於封裝圖象的對象,具體引見可參看官方文檔:http://msdn.microsoft.com/zh-cn/library/system.drawing.bitmap.aspx。

2、Graphics類

援用自System.Drawing,(處置圖象的對象),封裝一個 GDI+ 畫圖圖面。

關於Graphics類可點此檢查官方教程:http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.aspx。

第三步,保留

第二步操作中前往的Image對象,臨時定名為:iImage:

iImage.Save(pathAndName, System.Drawing.Imaging.ImageFormat.Jpeg); 

以上是緊縮操作,做了下實驗,101k的圖片,經由緊縮後是57k。這個應當和尺寸有關系。

以下是圖片裁剪,其實道理和下面類似,不過也就是對圖片停止重畫操作。

/// <summary> 
/// 截取圖片辦法 
/// </summary> 
/// <param name="url">圖片地址</param> 
/// <param name="beginX">開端地位-X</param> 
/// <param name="beginY">開端地位-Y</param> 
/// <param name="getX">截取寬度</param> 
/// <param name="getY">截取長度</param> 
/// <param name="fileName">文件稱號</param> 
/// <param name="savePath">保留途徑</param> 
/// <param name="fileExt">後綴名</param> 
public static string CutImage(string url, int beginX, int beginY, int getX, int getY, string fileName, string savePath, string fileExt) 
{ 
  if ((beginX < getX) && (beginY < getY)) 
  { 
 Bitmap bitmap = new Bitmap(url);//原圖 
if (((beginX + getX) <= bitmap.Width) && ((beginY + getY) <= bitmap.Height)) 
 { 
   Bitmap destBitmap = new Bitmap(getX, getY);//目的圖 
   Rectangle destRect = new Rectangle(0, 0, getX, getY);//矩描述器 
   Rectangle srcRect = new Rectangle(beginX, beginY, getX, getY); 

   Graphics.FromImage(destBitmap); 
            Graphics.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel); 
    
   ImageFormat format = ImageFormat.Png; 
   switch (fileExt.ToLower()) 
   { 
 case "png": 
   format = ImageFormat.Png; 
   break; 
 case "bmp": 
   format = ImageFormat.Bmp; 
   break; 
 case "gif": 
   format = ImageFormat.Gif; 
   break; 
   } 
   destBitmap.Save(savePath + "//" + fileName , format); 
   return savePath + "\\" + "*" + fileName.Split('.')[0] + "." + fileExt; 
 } 
 else 
 { 
   return "截取規模超越圖片規模"; 
 } 
  } 
  else 
  { 
 return "請確認(beginX < getX)&&(beginY < getY)"; 
  } 
} 

解釋:

Rectangle類:矩形,概況可參考官方文檔:http://msdn.microsoft.com/zh-cn/library/system.windows.shapes.rectangle(v=vs.85).aspx

以上就是裁剪一個圖片文件的示例代碼。

本文所應用代碼,是項目中真實代碼,曾經過測試。

願望本文所述對年夜家的C#法式設計有所贊助。

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