.NET Framework 技术分享,C# Image 对象与 base64 字符串的相互转换

c# image 转 base64

发布用户:小梦

2023/02/17 13:44


程序的基本思路是使用 .NET Framework 提供的 base64 转换器,其中单独剔出来了一个 ImageFormatGuidToString() 方法,这个方法是为了确保图像保存到内存流的时候用的是正常的图像格式。如果是使用 Image 类创建的新图像,那么它的 RawFormat 参数值并不是常规的格式,这个时候如果使用这种图像格式保存到内存流中会导致失败,具体的异常消息大概是 值不能为 null。参数名:encoder,所以这个地方在图像保存到内存流之前首先检查了现有图像的格式。转换后的 base64 字符串是没有标识头的,要在 HTML 标签中显示需要自己加上头部,如 “data:image/png;base64,...”:

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

// Image 对象转换为 base64 字符串
string ImageToBase64(Image _image)
{
    MemoryStream ms = new MemoryStream();
    try
    {
        if (ImageFormatGuidToString(_image.RawFormat) == null)
        {
            _image.Save(ms, ImageFormat.Png);
        }
        else
        {
            _image.Save(ms, _image.RawFormat);
        }
        byte[] arr = new byte[ms.Length];
        ms.Position = 0;
        ms.Read(arr, 0, (int)ms.Length);
        return Convert.ToBase64String(arr);
    }
    catch
    {
        return null;
    }
    finally
    {
        ms.Close();
    }
}

// base64 字符串转换为 Image 对象
Image Base64ToImage(string _base64)
{
    byte[] arr = Convert.FromBase64String(_base64);
    MemoryStream ms = new MemoryStream(arr);
    Bitmap bmp = new Bitmap(ms);
    try
    {
        Image result = new Bitmap(bmp.Width, bmp.Height);
        Graphics g = Graphics.FromImage(result);
        g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
        g.Dispose();
        return result;
    }
    catch
    {
        return null;
    }
    finally
    {
        bmp.Dispose();
        ms.Close();
    }
}

// 用于检查图像格式
string ImageFormatGuidToString(ImageFormat _format)
{
    if (_format.Guid == ImageFormat.Bmp.Guid)
    {
        return "bmp";
    }
    else if (_format.Guid == ImageFormat.Gif.Guid)
    {
        return "gif";
    }
    else if (_format.Guid == ImageFormat.Jpeg.Guid)
    {
        return "jpg";
    }
    else if (_format.Guid == ImageFormat.Png.Guid)
    {
        return "png";
    }
    else if (_format.Guid == ImageFormat.Icon.Guid)
    {
        return "ico";
    }
    else if (_format.Guid == ImageFormat.Emf.Guid)
    {
        return "emf";
    }
    else if (_format.Guid == ImageFormat.Exif.Guid)
    {
        return "exif";
    }
    else if (_format.Guid == ImageFormat.Tiff.Guid)
    {
        return "tiff";
    }
    else if (_format.Guid == ImageFormat.Wmf.Guid)
    {
        return "wmf";
    }
    else
    {
        return null;
    }
}

 

相关环境:.NET Framework 4.0



代码写多了,脑力不够用了,请我喝杯咖啡提提神 ☕

警告!禁止网络诈骗、非法集资、非法套现等法律外的缘由转账汇款,你的赞赏转账请考虑再三后支付,此收款不作任何形式的退款。





金额:

* 支付宝支付后如果没有自动返回请手动返回此页并刷新。



* 在线内容服务不支持任何形式的退款/退费操作;支付后的订单记录可以在“用户主页 - 用户订单中心”查看。

此网站可能不完全兼容您目前的浏览器!
此页随时可能被替换下线,请不要依赖此页功能!
此页正在维护更新,可能会出现错误或卡顿。
通知 & 公告

暂时还没有消息