如何将 image 转成 base64 字符串?

咨询区

  • vaj90

我的项目中有一个需求,需要将 base64 格式的字符串 data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD.. 转成 image 格式,请问我该如何实现?

回答区

  • Patashu

我写了一个 image 和 base64 相互转换的帮助类,你可以直接拿去用,参考如下代码:

public class Base64Image
{
    public static Base64Image Parse(string base64Content)
    {
        if (string.IsNullOrEmpty(base64Content))
        {
            throw new ArgumentNullException(nameof(base64Content));
        }

        int indexOfSemiColon = base64Content.IndexOf(";", StringComparison.OrdinalIgnoreCase);

        string dataLabel = base64Content.Substring(0, indexOfSemiColon);

        string contentType = dataLabel.Split(':').Last();

        var startIndex = base64Content.IndexOf("base64,", StringComparison.OrdinalIgnoreCase) + 7;

        var fileContents = base64Content.Substring(startIndex);

        var bytes = Convert.FromBase64String(fileContents);

        return new Base64Image
        {
            ContentType = contentType,
            FileContents = bytes
        };
    }

    public string ContentType { get; set; }

    public byte[] FileContents { get; set; }

    public override string ToString()
    {
        return $"data:{ContentType};base64,{Convert.ToBase64String(FileContents)}";
    }
}

然后你可以像下面这样使用。

public static void Main(string[] args)
        {
            var base64Img = new Base64Image
            {
                FileContents = File.ReadAllBytes("Path to image"),
                ContentType = "image/png"
            };

            string base64EncodedImg = base64Img.ToString();
        }
  • sumith madhushan

如果是将 图片路径 转为 base64 字符串,可以先将 路径中的图片 转为 byte[] 形式,然后转为 base64 格式的字符串即可,参考如下代码:

public static string ImageToBase64(string _imagePath)
    {
        string _base64String = null;

        using (System.Drawing.Image _image = System.Drawing.Image.FromFile(_imagePath))
        {
            using (MemoryStream _mStream = new MemoryStream())
            {
                _image.Save(_mStream, _image.RawFormat);
                byte[] _imageBytes = _mStream.ToArray();
                _base64String = Convert.ToBase64String(_imageBytes);

                return "data:image/jpg;base64," + _base64String;
            }
        }
    }

点评区

说到这个图片的 base64 格式,让我想起来前段时间有位朋友将 base64 格式的图片塞到了 sqlserver,导致程序运行一段时间之后内存过大,所以我建议这种需求,小规模的可以用 nginx 单独做图片服务器,大规模的可以用 fastdfs 或者图省事用阿里的 OSS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值