C#根据http和ftp图片地址获取对应图片

发布时间 - 2026-01-11 02:07:26    点击率:

本文实例为大家分享了C#根据http和ftp地址获取对应图片的具体代码,供大家参考,具体内容如下

public class GetBitmapImageClass
 {
  public BitmapSource GetImageHttp(string url,int width)
  {
   var image = new BitmapImage();
   int BytesToRead = 100;
   if (!string.IsNullOrEmpty(url))
   {
    WebRequest request = WebRequest.Create(new Uri(url, UriKind.Absolute));
    request.Timeout = -1;
    WebResponse response = request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    BinaryReader reader = new BinaryReader(responseStream);
    MemoryStream memoryStream = new MemoryStream();

    byte[] bytebuffer = new byte[BytesToRead];
    int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);

    while (bytesRead > 0)
    {
     memoryStream.Write(bytebuffer, 0, bytesRead);
     bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
    }

    image.BeginInit();
    image.DecodePixelWidth = width;
    image.CacheOption = BitmapCacheOption.OnLoad;
    memoryStream.Seek(0, SeekOrigin.Begin);

    image.StreamSource = memoryStream;
    image.EndInit();
    image.Freeze();
    memoryStream.Close();
    reader.Close();
    responseStream.Close();
    response.Close();
   }
   return image;
  }

  public BitmapSource GetImageFtp(string url, int width)
  {
   var image = new BitmapImage();
   if (!string.IsNullOrEmpty(url))
   {
    FtpWebRequest reqFtp;
    reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

    reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
    reqFtp.UseBinary = true;
    FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
    Stream ftpStream = response.GetResponseStream();
    MemoryStream mStream = new MemoryStream();
    ftpStream.CopyTo(mStream);
    mStream.Position = 0;
    int length = (int)mStream.Length;
    byte[] returnbyte = new byte[length];
    mStream.Read(returnbyte, 0, length);

    mStream.Close();
    ftpStream.Close();
    response.Close();

    System.IO.MemoryStream stream = new System.IO.MemoryStream(returnbyte);
    image.BeginInit();
    image.DecodePixelWidth = width;
    image.CacheOption = BitmapCacheOption.OnLoad;
    stream.Seek(0, SeekOrigin.Begin);

    image.StreamSource = stream;
    image.EndInit();
    image.Freeze();
    stream.Close();
   }
   return image;

  }


  [DllImport("gdi32.dll", SetLastError = true)]
  private static extern bool DeleteObject(IntPtr hObject);

  public BitmapSource ToBitmapSource(System.Drawing.Bitmap bmp)
  {
   try
   {
    var ptr = bmp.GetHbitmap();
    var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
     ptr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    DeleteObject(ptr);
    return source;
   }
   catch
   {
    return null;
   }
  }

  //获取缩略图
  public BitmapSource GetBitImage(string imageLink)
  {
   //"http://172.17.1.231:8083/3050273262379466760/2017/05/28/09/340800100999/09163448402.jpg?fid=1267520"
   if (imageLink.StartsWith("http://"))
   {
    return GetImageHttp(imageLink,200);
   }
   //ftp格式的
   else if (imageLink.StartsWith("ftp://"))
   {
    return GetImageFtp(imageLink, 200);
   }
  }

  //获取原图
  public BitmapSource GetHightBitImage(string imageLink)
  {
   //"http://172.17.1.231:8083/3050273262379466760/2017/05/28/09/340800100999/09163448402.jpg?fid=1267520"
   if (imageLink.StartsWith("http://"))
   {
    return GetImageHttp(imageLink, 0);
   }
   //ftp格式的
   else if (imageLink.StartsWith("ftp://"))
   {
    return GetImageFtp(imageLink, 0);
   }
  }

 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#  # http  # ftp  # 图片  # C#中HttpWebRequest、WebClient、HttpClient的使用详解  # C#使用HttpWebRequest与HttpWebResponse模拟用户登录  # C# httpwebrequest访问HTTPS错误处理方法  # 浅谈C#网络编程详解篇  # 详解C# 网络编程系列:实现类似QQ的即时通信程序  # 总结C#网络编程中对于Cookie的设定要点  # C# Socket网络编程实例  # C#网络编程基础之进程和线程详解  # 深入学习C#网络编程之HTTP应用编程(上)  # 大家分享  # 具体内容  # 大家多多  # bytesRead  # bytebuffer  # byte  # Read  # BeginInit  # Write  # gt  # memoryStream  # responseStream  # Stream  # GetResponse  # GetResponseStream 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Windows Hello人脸识别突然无法使用  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  bootstrap日历插件datetimepicker使用方法  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  制作公司内部网站有哪些,内网如何建网站?  个人网站制作流程图片大全,个人网站如何注销?  微信小程序 input输入框控件详解及实例(多种示例)  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  js实现点击每个li节点,都弹出其文本值及修改  Python制作简易注册登录系统  米侠浏览器网页背景异常怎么办 米侠显示修复  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何在云指建站中生成FTP站点?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何用y主机助手快速搭建网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel如何处理文件下载请求?(Response示例)  如何在Ubuntu系统下快速搭建WordPress个人网站?  进行网站优化必须要坚持的四大原则  *服务器网站为何频现安全漏洞?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  jquery插件bootstrapValidator表单验证详解  详解jQuery中的事件  微信小程序制作网站有哪些,微信小程序需要做网站吗?  node.js报错:Cannot find module 'ejs'的解决办法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  香港服务器WordPress建站指南:SEO优化与高效部署策略  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何在云虚拟主机上快速搭建个人网站?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  LinuxCD持续部署教程_自动发布与回滚机制  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何在IIS中配置站点IP、端口及主机头?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Android 常见的图片加载框架详细介绍  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解