今天一朋友问我如何通过URL地址将图片保存下来。

特地找了些资源,实现了一下代码:

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);
}
}
}

代码仅供参考。

通过URL地址将图片保存到本地的更多相关文章

  1. JAVA 通过url下载图片保存到本地

    //java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造U ...

  2. php 获取远程图片保存到本地

    php 获取远程图片保存到本地 使用两个函数 1.获取远程文件 2.把图片保存到本地 /** * 获取远程图片并把它保存到本地 * $url 是远程图片的完整URL地址,不能为空. */ functi ...

  3. React Native之图片保存到本地相册(ios android)

    React Native之图片保存到本地相册(ios android) 一,需求分析 1,react native保存网络图片到相册,iOS端可以用RN自带的CameraRoll完美解决,但是andr ...

  4. 微信小程序图片保存到本地

    微信小程序图片保存到本地是一个常用功能: 这里讲解下完整实现思路: 因为微信官方的授权只弹一次,用户拒绝后再次调用,就需要结合button组件的微信开放能力来调起,以下方案在微信各种授权中可参考. w ...

  5. js截图及绕过服务器图片保存至本地(html2canvas)

    今天要分享的是用html2canvas根据自己的需求生成截图,并且修复html2canvas截图模糊,以及绕过服务器图片保存至本地. 只需要短短的几行代码,就能根据所需的dom截图,是不是很方便,但是 ...

  6. 将base64Url对应图片保存到本地

    上图中的内容就是base64编码之后对应的Url  图中base64,之前的都是用于声明该图片的格式以及它的编码格式  base64,之后的就是该图片对应的数据了 我们只需要把数据转换为字节保存下来即 ...

  7. url地址的图片路径

    url地址的图片路径: (./images/1.jpg) 中的./指根路径,有或没有都可以: (../images/1.jpg) 中的../指相对路径: (../../images/1.jpg) 中的 ...

  8. iOS 将图片保存到本地

    //将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key {     NSUserDefaults* prefer ...

  9. iOS-iOS调用相机调用相册【将图片保存到本地相册】

    设置头部代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 1.调用相机 检测前置摄像头是否可用 - ...

  10. Android View转为图片保存为本地文件,异步监听回调操作结果;

    把手机上的一个View或ViewGroup转为Bitmap,再把Bitmap保存为.png格式的图片: 由于View转Bitmap.和Bitmap转图片都是耗时操作,(生成一个1M的图片大约500ms ...

随机推荐

  1. K8S节点配置资源驱逐

    #参考文章:https://www.cnblogs.com/zhangrui153169/p/15726165.html 当节点内存到达多少时.对节点的pod进行驱逐 [root@lecode-tes ...

  2. [linux]非root账户 sudo cd 无法切换目录解决办法

    在Centos上有个账户A(非root),有sudo权限(权限比较大),想要用 cd 命令切换到 B账号的 /home/B 下的目录,结果没作用 [liuzz ~]$ sudo cd /home/xi ...

  3. Go语言书籍推荐

    附录: 其他书籍的介绍:https://github.com/golang/go/wiki/Books Go程序设计语言 (圣经) 作者 艾伦 A.A.多诺万 Kernighan 下载地址 中文版PD ...

  4. 【DL论文精读笔记】ResNet

    Abstract 利用残差学习架构释放深度 152层深度是VGG的8倍,且复杂度更低 ImageNet上的错误率3.57% 在ILSVRC和2015COCO竞赛,在多项任务拿到第一 3.1 Intro ...

  5. Opengl ES之YUV数据渲染

    YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考: <音视频基础知识-YUV图像> YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能直接用 ...

  6. 关于mysql在linux(deb系)遇到的问题及解决方法

    前言 当我在树莓派上安装 mysql 数据库的时候,默认安装的是mariadb 数据库,不过没什么区别(在我看来),然后就是闹心的解决各种问题了 1. mysql 在root用户下无密码登录问题 这个 ...

  7. eclipse 无法将节点解析到句柄

    将 干掉即可

  8. ArcGIS API for JS 访问浏览器提示不安全链接的服务时 如何设置

    当我们通过ArcGISServer发布了服务后,首先要在要访问的计算机上通过浏览器访问下服务是否可用.但有时候会出现不安全的标识. 如果这样的链接直接放到代码中,可能会加载失败. 代码如下. var ...

  9. .net6&7中如何优雅且高性能的使用Json序列化

    .net中的SourceGenerator让开发者编可以写分析器,在项目代码编译时,分析器分析项目既有的静态代码,允许添加源代码到GeneratorExecutionContext中,一同与既有的代码 ...

  10. 【Java】【数据库】索引为何使查询变得更快?--B+树

    排序数据的二分查找 二分查找的时间复杂度是\(O(log_2n)\),明显快于暴力搜索. 索引 建立索引的数据,就是通过事先排好顺序,在查找时可以应用二分查找来提高查询效率. 所以索引应该尽可能建立在 ...