将图像(通过路径选择)转换为 base64字符串

如何将图像从用户计算机上的路径转换为 C # 中的 base64字符串?

例如,我有图像的路径(格式为 C:/image/1.gif) ,并希望返回一个表示 1.gif图像的数据 URI,如 data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..

318673 次浏览

获取图像的字节数组(byte[])表示形式,然后像下面这样使用 Convert.ToBase64String()、 st. :

byte[] imageArray = System.IO.File.ReadAllBytes(@"image file path");
string base64ImageRepresentation = Convert.ToBase64String(imageArray);

将 base64图像转换回 System.Drawing.Image:

var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));

试试这个

using (Image image = Image.FromFile(Path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();


// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}

这就是我为此写的课程:

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


var base64Img = new Base64Image {
FileContents = File.ReadAllBytes("Path to image"),
ContentType="image/png"
};


string base64EncodedImg = base64Img.ToString();

可以使用 Server.Map路径给出相对路径,然后可以使用 base64转换创建图像,或者只需将 base64字符串添加到 image src

byte[] imageArray = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Upload_Image.png"));


string base64ImageRepresentation = Convert.ToBase64String(imageArray);

因为我们大多数人都喜欢一笔带过:

Convert.ToBase64String(File.ReadAllBytes(imageFilepath));

如果您需要它作为 Base64字节数组:

Encoding.ASCII.GetBytes(Convert.ToBase64String(File.ReadAllBytes(imageFilepath)));

差不多吧

 Function imgTo64(ByVal thePath As String) As String
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(thePath)
Dim m As IO.MemoryStream = New IO.MemoryStream()


img.Save(m, img.RawFormat)
Dim imageBytes As Byte() = m.ToArray
img.Dispose()


Dim str64 = Convert.ToBase64String(imageBytes)
Return str64
End Function

这样更简单,传递图像,然后传递格式。

private static string ImageToBase64(Image image)
{
var imageStream = new MemoryStream();
try
{
image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Bmp);
imageStream.Position = 0;
var imageBytes = imageStream.ToArray();
var ImageBase64 = Convert.ToBase64String(imageBytes);
return ImageBase64;
}
catch (Exception ex)
{
return "Error converting image to base64!";
}
finally
{
imageStream.Dispose;
}
}

您可以轻松地传递图像的路径来检索 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;
}
}
}

希望这个能帮上忙。

下面这段代码对我很有用:

string image_path="physical path of your image";
byte[] byes_array = System.IO.File.ReadAllBytes(Server.MapPath(image_path));
string base64String = Convert.ToBase64String(byes_array);

根据最佳答案,升级到 C # 8。可以开箱即用。在 Image之前添加了显式的 System.Drawing,因为默认情况下可以使用来自其他名称空间的类。

public static string ImagePathToBase64(string path)
{
using System.Drawing.Image image = System.Drawing.Image.FromFile(path);
using MemoryStream m = new MemoryStream();
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
tring base64String = Convert.ToBase64String(imageBytes);
return base64String;
}

对于到达这里的谷歌人来说,情况正好相反(这里没有相关的问题/答案)

public static byte[] BytesFromBase64ImageString(string imageData)
{
var trunc = imageData.Split(',')[1];
var padded = trunc.PadRight(trunc.Length + (4 - trunc.Length % 4) % 4, '=');
return Convert.FromBase64String(padded);
}

这段代码在 DotNet Core 6上运行良好

using (Image image = Image.FromFile(path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, ImageFormat.Jpeg);
byte[] imageBytes = m.ToArray();


// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);


// In my case I didn't find the part "data:image/png;base64,", so I added.
return $"data:image/png;base64,{base64String}";
}
}