C# .net 对图片操作
?//********************************************************************************************C#對圖片的幾種簡單處理
#region 生成縮略圖
??????? public void MakeSmallImg(string filePath, string saveImg)
??????? {
??????????? //從文件取得圖片對象
??????????? System.Drawing.Image image = System.Drawing.Image.FromFile(filePath, true);
???????????
??????????? //取得圖片大小
??????????? System.Drawing.Size size = new System.Drawing.Size((int)image.Width, (int)image.Height);
??????????? //新建一個bmp圖片
??????????? System.Drawing.Image bitmap = new System.Drawing.Bitmap(size.Width, size.Height);
??????????? //新建一個畫板
??????????? System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
??????????? //設置高質量插值法
??????????? g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
??????????? //設置高質量,低速度呈現平滑程度
??????????? g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
??????????? //清空一下畫布
??????????? g.Clear(System.Drawing.Color.White);
??????????? //在指定位置畫圖
??????????? g.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
??????????????? new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
??????????????? System.Drawing.GraphicsUnit.Pixel);
??????????? ///文字水印
??????????? //System.Drawing.Graphics G=System.Drawing.Graphics.FromImage(bitmap);
??????????? //System.Drawing.Font f=new Font("宋體",10);
??????????? //System.Drawing.Brush b=new SolidBrush(Color.Black);
??????????? //G.DrawString("myohmine",f,b,10,10);
??????????? //G.Dispose();
?
??????????? ///圖片水印
??????????? //System.Drawing.Image copyImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("pic/1.gif"));
??????????? //Graphics a = Graphics.FromImage(bitmap);
??????????? //a.DrawImage(copyImage, new Rectangle(bitmap.Width-copyImage.Width,bitmap.Height-copyImage.Height,copyImage.Width, copyImage.Height),0,0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
??????????? //copyImage.Dispose();
??????????? //a.Dispose();
??????????? //copyImage.Dispose();
??????????? //保存高清晰度的縮略圖
??????????? //???bitmap.Save(strGoodFile, System.Drawing.Imaging.ImageFormat.Jpeg);
??????????? //???加個a表示是縮略圖
??????????? bitmap.Save(saveImg, System.Drawing.Imaging.ImageFormat.Jpeg);
??????????? g.Dispose();
??????????? image.Dispose();
??????????? bitmap.Dispose();
??????? }
??????? #endregion
//****************************************************************************************關于圖片處理方法(C#)
處理圖片時常用的過程是:讀入圖片文件并轉化為Bitmap -> 處理此Bitmap的每個點以得到需要的效果 -> 保存新的Bitmap到文件
使用C#很方便的就可以把多種格式的圖片文件讀到Bitmap對象中。一句話就夠了,常見的格式都支持,諸如JPEG,BMP,PNG等等。
Bitmap bmp = new Bitmap("文件名");
然后就是怎么處理這個圖片的問題了,與本案無關,pass。
最后就是保存。JPEG雖然是有損壓縮方案,但是它在縮減文件體積和盡可能好的保留原有信息的矛盾上很好的找到了平衡點,所以在很多情況下成為首選的保存方案。
C#當然不會無視這一點,Bitmap類提供了默認的另存為JPEG的方法:
bmp.Save("輸出文件", System.Drawing.Imaging.ImageFormat.Jpeg);
這樣當然很方便,但有時候更在乎文件體積而有時候更在乎圖像質量,是不是有什么辦法可以讓自己來控制壓縮質量呢?
答案是肯定的,bmp.Save方法中有個重載用到了EncoderParameters參數。我們可以在這個參數中加入自己的控制質量。
????????/**////?<summary>
????????///?保存JPG時用
????????///?</summary>
????????///?<param?name="mimeType"></param>
????????///?<returns>得到指定mimeType的ImageCodecInfo</returns>
????????private?static?ImageCodecInfo?GetCodecInfo(string?mimeType)
????????...{
????????????ImageCodecInfo[]?CodecInfo?=?ImageCodecInfo.GetImageEncoders();
????????????foreach?(ImageCodecInfo?ici?in?CodecInfo)
????????????...{
????????????????if?(ici.MimeType?==?mimeType)?return?ici;
????????????}
????????????return?null;
????????}
????????/**////?<summary>
????????///?保存為JPEG格式,支持壓縮質量選項
????????///?</summary>
????????///?<param?name="bmp"></param>
????????///?<param?name="FileName"></param>
????????///?<param?name="Qty"></param>
????????///?<returns></returns>
????????public?static?bool?KiSaveAsJPEG(Bitmap?bmp,?string?FileName,?int?Qty)
????????...{
????????????try
????????????...{
????????????????EncoderParameter?p;
????????????????EncoderParameters?ps;
????????????????ps?=?new?EncoderParameters(1);
????????????????p?=?new?EncoderParameter(System.Drawing.Imaging.Encoder.Quality,?Qty);
????????????????ps.Param[0]?=?p;
????????????????bmp.Save(FileName,?GetCodecInfo("image/jpeg"),?ps);
????????????????
????????????????return?true;
????????????}
????????????catch
????????????...{
????????????????return?false;
????????????}
????????} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的C# .net 对图片操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS的正则表达式
- 下一篇: sockets C#