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#法式設計有所贊助。