图片URL转成Base64字符串

/// <summary>
/// 通过Url获取到Image格式的文件
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static Image UrlToImage(string url)
{
WebClient mywebclient = new WebClient();
byte[] Bytes = mywebclient.DownloadData(url);
using (MemoryStream ms = new MemoryStream(Bytes))
{
Image outputImg = Image.FromStream(ms);
return outputImg;
}
}
/// <summary>
/// 再将Iamge文件转为Base64字符串
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static string BitmapToBase64(Image img)
{
System.Drawing.Bitmap bitMap = new System.Drawing.Bitmap(img);
string imgBase64 = string.Empty;
using (MemoryStream memoryStream = new MemoryStream())
{
bitMap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] buffer = new byte[memoryStream.Length];
memoryStream.Position = 0;
memoryStream.Read(buffer, 0, (int)memoryStream.Length);
memoryStream.Close();
imgBase64 = Convert.ToBase64String(buffer);
}
return imgBase64;
}

  Base64字符串转成图片并保存

/// <summary>
/// 将Base64String转为图片并保存
/// </summary>
/// <param name="imgBase64"></param>
public static void Base64ToImage(string imgBase64)
{
string format;
string imgPath = Directory.GetCurrentDirectory() + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss");
byte[] buffer = Convert.FromBase64String(imgBase64);
using (MemoryStream memoryStream = new MemoryStream(buffer))
{
System.Drawing.Bitmap bitMap = new System.Drawing.Bitmap(memoryStream);
System.Drawing.Imaging.ImageFormat imgFormat = GetImageFormat(memoryStream, out format);
imgPath = imgPath + format;
bitMap.Save(imgPath, imgFormat);
bitMap.Dispose();
}
}
/// <summary>
/// 获取Image图片格式
/// </summary>
/// <param name="file"></param>
/// <param name="format"></param>
/// <returns></returns>
private static System.Drawing.Imaging.ImageFormat GetImageFormat(MemoryStream file, out string format)
{
byte[] sb = new byte[2]; //这次读取的就是直接0-1的位置长度了.
file.Read(sb, 0, sb.Length);
//根据文件头判断
string strFlag = sb[0].ToString() + sb[1].ToString();
//察看格式类型
switch (strFlag)
{
//JPG格式
case "255216":
format = ".jpg";
return System.Drawing.Imaging.ImageFormat.Jpeg;
//GIF格式
case "7173":
format = ".gif";
return System.Drawing.Imaging.ImageFormat.Gif;
//BMP格式
case "6677":
format = ".bmp";
return System.Drawing.Imaging.ImageFormat.Bmp;
//PNG格式
case "13780":
format = ".png";
return System.Drawing.Imaging.ImageFormat.Png;
//其他格式
default:
format = ".jpg";
return System.Drawing.Imaging.ImageFormat.Jpeg;
}
}

  调用

 static void Main(string[] args)
{
//string imgUrl = "D:\\c29e09b0-e5f4-43fa-9ded-8f9865a2e8d4.jpg";
//string imgUrl = "https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png";
string imgUrl = "http://file02.16sucai.com/d/file/2015/0408/779334da99e40adb587d0ba715eca102.jpg";//图片可以是本地磁盘地址、可以是http和https地址
Image img = UrlToImage(imgUrl);//转成Image格式
string imgBase64 = BitmapToBase64(img); //注意:生成的Base64字符串加上 data:image/jpeg;base64, 可以在前端识别
Base64ToImage( imgBase64);//生成图片并保存 Console.ReadKey();
}

  

最新文章

  1. 一行代码引入 ViewPager 无限循环 + 页码显示
  2. 数据结构之平衡二叉树(AVL树)
  3. innodb Lock wait timeout exceeded;
  4. Matlab中如何将(自定义)函数作为参数传递给另一个函数
  5. CocoStudio教程三:认识并利用CocoStudio的果实 运行2.2.1版本
  6. 模板页显示Excel数据Gridview增删改查
  7. 【不积跬步,无以致千里】安装roundcube 时出现 “DSN (write): NOT OK(SQLSTATE[HY000] [2002] No such file or directory)”
  8. MVC产生验证码
  9. How to calculate the undo_retention time
  10. fiddler 路由设置
  11. Python 的枚举 Enum
  12. centos搭建git服务
  13. 根据数值获得概率密度pdf和累积密度分布cdf(MATLAB语言)
  14. Cocos Creator 获取当前 Pageview 翻页到第几页的事件索引
  15. 使用grafana provisioning通过配置方式添加datasource和dashboard
  16. A/B HDU - 1576 (exgcd)
  17. MT【41】利用不等式妙消参数
  18. 9.Django组件-cookie和session
  19. 泡泡一分钟:Exploiting Points and Lines in Regression Forests for RGB-D Camera Relocalization
  20. Urllib库及cookie的使用

热门文章

  1. 数据库允许空值(null),往往是悲剧的开始(1分钟系列)
  2. Python:用filter函数求素数 (再理解generator)
  3. Echarts 饼状图 字体重叠问题
  4. java中创建List&lt;&gt;类型的数组-20171028
  5. django之表多对多建立方式、form组件、钩子函数 08
  6. [Spring boot] CommandLineRunner and Autowired
  7. SpringBoot常见报错及解决方法
  8. Redis配置文件中bind参数
  9. JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能
  10. Android_(控件)使用ListView显示Android系统中SD卡的文件列表