C#实现根据图片的链接地址获取图片的后缀名

作者:£冷☆月№ 时间:2022-08-04 04:30:58 

某天一朋友突然发来一个地址,问我怎么获取这张图片的后缀名??

将代码放在下面以供参考:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;

namespace ConsoleApp3
{
   class Program
   {
       static void Main(string[] args)
       {
           var imgUrl = "http://emoji.qpic.cn/wx_emoji/haiannhLHhY7B1tX6eZ2BGNh9kzx3VCQ2MJfSQkSgE47sEXofVVoPCiaZKYbPcyQhS/";
           var imgByte = GetBytesFromUrl(imgUrl);
           if (imgByte.Length > 0)
           {
               var image = BytesToImage(imgByte);
               if (image != null)
               {
                   var mimeType = GetMimeType(image);
                   if (!string.IsNullOrEmpty(mimeType))
                   {
                       var fileName = AppDomain.CurrentDomain.BaseDirectory + "\\imgses\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + mimeType;
                       CreateImageFromBytes(fileName, imgByte);
                   }
               }
           }
       }

/// <summary>
       /// 将http路径图片转为byte字节数据
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       public static byte[] GetBytesFromUrl(string url)
       {
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

byte[] bytes;
           using (Stream stream = request.GetResponse().GetResponseStream())
           {
               using (MemoryStream mstream = new MemoryStream())
               {
                   int count = 0;
                   byte[] buffer = new byte[1024];
                   int readNum = 0;
                   while ((readNum = stream.Read(buffer, 0, 1024)) > 0)
                   {
                       count = count + readNum;
                       mstream.Write(buffer, 0, readNum);
                   }
                   mstream.Position = 0;
                   using (BinaryReader br = new BinaryReader(mstream))
                   {
                       bytes = br.ReadBytes(count);
                   }
               }
           }
           return bytes;
       }

/// <summary>
       /// 将byte字节数据转为Image图片
       /// </summary>
       /// <param name="bytes">字节数组</param>
       /// <returns>图片</returns>
       public static Image BytesToImage(byte[] bytes)
       {
           Image image = null;
           using (MemoryStream ms = new MemoryStream(bytes))
           {
               ms.Write(bytes, 0, bytes.Length);
               image = Image.FromStream(ms, true);
           }
           return image;
       }

/// <summary>
       /// 将Image图片转为byte字节数据
       /// </summary>
       /// <param name="image"></param>
       /// <returns></returns>
       public static byte[] ImageToBytes(Image image)
       {
           byte[] bt = null;
           if (!image.Equals(null))
           {
               using (MemoryStream mostream = new MemoryStream())
               {
                   Bitmap bmp = new Bitmap(image);
                   bmp.Save(mostream, ImageFormat.Bmp);//将图像以指定的格式存入缓存内存流
                   bt = new byte[mostream.Length];
                   mostream.Position = 0;//设置留的初始位置
                   mostream.Read(bt, 0, Convert.ToInt32(bt.Length));
               }
           }
           return bt;
       }

/// <summary>
       /// 根据Image图片获取图片类型
       /// </summary>
       /// <param name="image"></param>
       /// <returns></returns>
       public static string GetMimeType(Image image)
       {
           var mimeType = "";
           var ImageCodec = ImageCodecInfo.GetImageDecoders();
           foreach (var item in ImageCodec)
           {
               if (item.FormatID == image.RawFormat.Guid)
               {
                   mimeType = item.MimeType.Split('/')[1];
                   break;
               }
           }
           return mimeType;
       }

/// <summary>
       /// 将byte[]图片保存到指定文件
       /// </summary>
       /// <param name="fileName">保存的完整路径(包含文件名)</param>
       /// <param name="bytes"></param>
       /// <returns></returns>
       public static void CreateImageFromBytes(string fileName, byte[] bytes)
       {
           string file = fileName;
           FileInfo info = new FileInfo(fileName);
           Directory.CreateDirectory(info.Directory.FullName);
           File.WriteAllBytes(file, bytes);
       }
   }
}

来源:https://www.cnblogs.com/wsk198726/p/16670299.html

标签:C#,图片,后缀名
0
投稿

猜你喜欢

  • iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    2023-06-21 09:24:48
  • C#使用udp如何实现消息的接收和发送

    2022-05-26 20:56:01
  • C语言中魔性的float浮点数精度问题

    2022-08-12 08:59:26
  • C#实现微信跳一跳小游戏的自动跳跃助手开发实战

    2022-12-11 02:49:08
  • 学生视角带你了解Java内部类

    2022-09-29 17:51:04
  • java后台批量下载文件并压缩成zip下载的方法

    2021-07-24 21:13:11
  • Java Base64 加密与解密示例代码

    2022-11-13 15:11:56
  • java日期操作工具类(获取指定日期、日期转换、相隔天数)

    2023-11-28 06:42:53
  • Java中关于二叉树的概念以及搜索二叉树详解

    2023-01-12 00:09:25
  • Java两个乒乓球队比赛名单问题(判断素数)

    2022-11-15 08:39:20
  • 解决Spring Cloud Feign 请求时附带请求头的问题

    2022-12-11 04:29:46
  • 通过WIFI(不用数据线)连接Android手机调试

    2023-01-05 18:20:45
  • SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题

    2021-12-02 09:49:43
  • java 反射机制详解及实例代码

    2023-01-31 10:26:08
  • 在IntelliJ IDEA中为自己设计的类库生成JavaDoc的方法示例

    2023-11-25 09:49:02
  • 详解C# FileStream类

    2022-10-19 13:44:27
  • 关于Java中增强for循环使用的注意事项

    2021-08-09 16:47:43
  • MyBatis全局配置文件详解

    2021-09-19 10:13:32
  • JavaWeb开发中alias拦截器的使用方法

    2023-08-20 10:36:55
  • C#开发Android百度地图手机应用程序(多地图展示)

    2022-01-06 00:47:51
  • asp之家 软件编程 m.aspxhome.com