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#,图片,后缀名
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
iOS应用中使用Toolbar工具栏方式切换视图的方法详解
2023-06-21 09:24:48
![](https://img.aspxhome.com/file/2023/6/98646_0s.png)
C#使用udp如何实现消息的接收和发送
2022-05-26 20:56:01
![](https://img.aspxhome.com/file/2023/3/116443_0s.png)
C语言中魔性的float浮点数精度问题
2022-08-12 08:59:26
C#实现微信跳一跳小游戏的自动跳跃助手开发实战
2022-12-11 02:49:08
![](https://img.aspxhome.com/file/2023/7/126057_0s.png)
学生视角带你了解Java内部类
2022-09-29 17:51:04
![](https://img.aspxhome.com/file/2023/9/62429_0s.png)
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
![](https://img.aspxhome.com/file/2023/7/83427_0s.png)
Java两个乒乓球队比赛名单问题(判断素数)
2022-11-15 08:39:20
解决Spring Cloud Feign 请求时附带请求头的问题
2022-12-11 04:29:46
通过WIFI(不用数据线)连接Android手机调试
2023-01-05 18:20:45
![](https://img.aspxhome.com/file/2023/1/97881_0s.png)
SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题
2021-12-02 09:49:43
![](https://img.aspxhome.com/file/2023/1/88151_0s.png)
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
![](https://img.aspxhome.com/file/2023/7/63307_0s.png)
MyBatis全局配置文件详解
2021-09-19 10:13:32
![](https://img.aspxhome.com/file/2023/3/69093_0s.png)
JavaWeb开发中alias拦截器的使用方法
2023-08-20 10:36:55
C#开发Android百度地图手机应用程序(多地图展示)
2022-01-06 00:47:51
![](https://img.aspxhome.com/file/2023/6/77306_0s.png)