根據URL實現網上抓圖
一、需要引用的名稱空間
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System;
using System.Drawing;
using System.IO;
#region (27) 根據圖片路徑生成一張新的圖片並儲存
/// <summary>
/// 根據圖片路徑生成一張新的圖片並儲存
/// </summary>
/// <param name="Url">圖片來源Url</param>
/// <param name="SavePath">圖片儲存路徑</param>
/// <param name="NewImgName">新檔名</param>
public static void MakeNewImg_ByUrl(string Url,string SavePath,string NewImgName)
{
System.Uri myUri =new Uri(Url);//建立Uri對像以提供統一資源標符(uri)對像的表示形式和對uri各部的輕鬆訪問
WebRequest myWebRequest= WebRequest.Create(myUri); //發出對URI的請求
try
{
WebResponse myWebResponse= myWebRequest.GetResponse();//對URI請求作出響應
Stream str = myWebResponse.GetResponseStream(); //定義位元組序列的一般檢視
Bitmap bmp = new Bitmap(str);
float single1 = bmp.HorizontalResolution;//獲取Image對像的水平解析度
float single2 = bmp.VerticalResolution; //獲取Image對像的垂直解析度
Bitmap newbmp = new Bitmap(bmp.Width,bmp.Height,PixelFormat.Format32bppArgb);
newbmp.SetResolution(single1,single2);
Graphics gp = Graphics.FromImage(newbmp); //建立新的Graphics對像
gp.Clear(Color.White);//清除整個繪圖面並以指定的背景色填充
ImageCodecInfo myImageCodecInfo; // 檢索影象編碼器的所有相關資訊
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;//值
EncoderParameters myEncoderParameters;//陣列
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 95L);
myEncoderParameters.Param[0] = myEncoderParameter;
//設定高質量插值法
gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
gp.SmoothingMode = SmoothingMode.HighQuality;//設定圖片質量,指定是否將平滑處理(消除鋸齒)應用於直線、曲線和已填充區域的邊緣
gp.DrawImage(bmp, 0, 0, bmp.Width,bmp.Height);//重新繪圖
gp.Dispose();
//儲存圖片
newbmp.Save(SavePath+NewImgName, myImageCodecInfo, myEncoderParameters);
//釋放資源
bmp.Dispose();
newbmp.Dispose();
myWebResponse.Close();
}
catch
{
alert("生成失敗!");
}
}
//檢索影象編碼器的所有相關資訊
/// <summary>
/// 檢索指定格式的影象編碼器的所有相關資訊
/// </summary>
/// <param name="mimeType">圖片格式型別</param>
/// <returns>返回影象編碼器的相關資訊</returns>
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for(j = 0; j < encoders.Length; ++j)
{
if(encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
#endregion