图片和Base64字符串互转
2024-08-29 22:36:10
图片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();
}
最新文章
- 一行代码引入 ViewPager 无限循环 + 页码显示
- 数据结构之平衡二叉树(AVL树)
- innodb Lock wait timeout exceeded;
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- CocoStudio教程三:认识并利用CocoStudio的果实 运行2.2.1版本
- 模板页显示Excel数据Gridview增删改查
- 【不积跬步,无以致千里】安装roundcube 时出现 “DSN (write): NOT OK(SQLSTATE[HY000] [2002] No such file or directory)”
- MVC产生验证码
- How to calculate the undo_retention time
- fiddler 路由设置
- Python 的枚举 Enum
- centos搭建git服务
- 根据数值获得概率密度pdf和累积密度分布cdf(MATLAB语言)
- Cocos Creator 获取当前 Pageview 翻页到第几页的事件索引
- 使用grafana provisioning通过配置方式添加datasource和dashboard
- A/B HDU - 1576 (exgcd)
- MT【41】利用不等式妙消参数
- 9.Django组件-cookie和session
- 泡泡一分钟:Exploiting Points and Lines in Regression Forests for RGB-D Camera Relocalization
- Urllib库及cookie的使用
热门文章
- 数据库允许空值(null),往往是悲剧的开始(1分钟系列)
- Python:用filter函数求素数 (再理解generator)
- Echarts 饼状图 字体重叠问题
- java中创建List<;>;类型的数组-20171028
- django之表多对多建立方式、form组件、钩子函数 08
- [Spring boot] CommandLineRunner and Autowired
- SpringBoot常见报错及解决方法
- Redis配置文件中bind参数
- JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能
- Android_(控件)使用ListView显示Android系统中SD卡的文件列表