日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# .net 对图片操作

發布時間:2023/11/30 C# 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# .net 对图片操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging;public class ImageHelper {/// <summary> /// 獲取圖片中的各幀 /// </summary> /// <param name="pPath">圖片路徑</param> /// <param name="pSavePath">保存路徑</param> public void GetFrames(string pPath, string pSavedPath){Image gif = Image.FromFile(pPath);FrameDimension fd = new FrameDimension(gif.FrameDimensionsList[0]);//獲取幀數(gif圖片可能包含多幀,其它格式圖片一般僅一幀) int count = gif.GetFrameCount(fd);//以Jpeg格式保存各幀 for (int i = 0; i < count; i++){gif.SelectActiveFrame(fd, i);gif.Save(pSavedPath + "//frame_" + i + ".jpg", ImageFormat.Jpeg);}}/// <summary> /// 獲取圖片縮略圖 /// </summary> /// <param name="pPath">圖片路徑</param> /// <param name="pSavePath">保存路徑</param> /// <param name="pWidth">縮略圖寬度</param> /// <param name="pHeight">縮略圖高度</param> /// <param name="pFormat">保存格式,通常可以是jpeg</param> public void GetSmaller(string pPath, string pSavedPath, int pWidth, int pHeight){try{Image smallerImg;Image originalImg = Image.FromFile(pPath);Image.GetThumbnailImageAbort callback = new Image.GetThumbnailImageAbort(ThumbnailCallback);smallerImg = originalImg.GetThumbnailImage(pWidth, pHeight, callback, IntPtr.Zero);smallerImg.Save(pSavedPath + "//smaller.jpg", ImageFormat.Jpeg);}catch (Exception x){// }}/// <summary> /// 獲取圖片指定部分 /// </summary> /// <param name="pPath">圖片路徑</param> /// <param name="pSavePath">保存路徑</param> /// <param name="pPartStartPointX">目標圖片開始繪制處的坐標X值(通常為)</param> /// <param name="pPartStartPointY">目標圖片開始繪制處的坐標Y值(通常為)</param> /// <param name="pPartWidth">目標圖片的寬度</param> /// <param name="pPartHeight">目標圖片的高度</param> /// <param name="pOrigStartPointX">原始圖片開始截取處的坐標X值</param> /// <param name="pOrigStartPointY">原始圖片開始截取處的坐標Y值</param> /// <param name="pFormat">保存格式,通常可以是jpeg</param> public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY){Image originalImg = Image.FromFile(pPath);Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);Graphics graphics = Graphics.FromImage(partImg);Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目標位置 Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原圖位置(默認從原圖中截取的圖片大小等于目標圖片的大小) graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);partImg.Save(pSavedPath + "//part.jpg", ImageFormat.Jpeg);}public bool ThumbnailCallback(){return false;} }

?//********************************************************************************************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 对图片操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。