在实际工作中有遇到需要通过从服务端获取图片展示的需求,下面是相关实现的工具类和使用方法:
工具类
public static class ImageExtensions
{
/// <summary>
/// 通过NET获取网络图片
/// </summary>
/// <param name="url">要访问的图片所在网址</param>
/// <param name="requestAction">对于WebRequest需要进行的一些处理,比如代理、密码之类</param>
/// <param name="responseFunc">如何从WebResponse中获取到图片</param>
/// <returns></returns>
public static Image GetImageFromNet(this Uri url, Action<WebRequest> requestAction = null, Func<WebResponse, Image> responseFunc = null)
{
Image img;
try
{
WebRequest request = WebRequest.Create(url);
if (requestAction != null)
{
requestAction(request);
}
using (WebResponse response = request.GetResponse())
{
if (responseFunc != null)
{
img = responseFunc(response);
}
else
{
img = Image.FromStream(response.GetResponseStream());
}
}
}
catch
{
img = null;
}
return img;
}
}
使用方法
var uri = new Uri(url);
System.Drawing.Image img = Utils.ImageExtensions.GetImageFromNet(uri, (request) =>
{//此处可以对request进行相关设定,因为此部分均为基类,所以也可以用于FtpWebRequest之类
request.Timeout = 2000;
},
(response) =>
{//此处可以确定如何从response中获取图片,同时可以包括相关判断之类
return System.Drawing.Image.FromStream(response.GetResponseStream());
}
);
string path="保存的地址";
img.Save(path);