如何在C#中将用户计算机上的图像路径转换为base64字符串?
例如,我有图像路径(格式如C:/image/1.gif
),并希望获得类似于data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..
的数据URI,以表示返回的1.gif
图像。
试一下这个
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;
}
}
image.RawFormat
来判断。 - mekbRawFormat
不是一个图像格式说明符;它是 image
对象的一个属性,用于返回图像从文件中读取时所处的格式,这意味着在这种情况下,它将返回 gif 格式。因此,它不会改变任何东西,除了你现在拥有的是由 .Net 框架重新保存为 gif 的图像字节,而不是实际原始文件的字节。 - Nyerguds获取图像的字节数组(byte[]
)表示形式,然后使用Convert.ToBase64String()
,例如:
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)));
System.Drawing.Image
,你可以使用这样的代码:var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));
- Arin Ghazarian由于我们大多数人喜欢简短有力的话:
Convert.ToBase64String(File.ReadAllBytes(imageFilepath));
如果你需要它作为Base64字节数组:
Encoding.ASCII.GetBytes(Convert.ToBase64String(File.ReadAllBytes(imageFilepath)));
这是我为此目的编写的类:
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();
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;
}
}
}
_image.RawFormat
获取的相同类型,但将数据公开为mime类型image/jpg
。 - Nyerguds这段代码在 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}";
}
}
您可以使用Server.Map
路径来提供相对路径,然后您可以使用base64
转换创建图像,或者只需将base64
字符串添加到image src
中。
byte[] imageArray = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Upload_Image.png"));
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
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;
}
}
根据获得最高票的答案,更新为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;
}
return Convert.ToBase64String(File.ReadAllBytes(path));
来替换整个过程。根本不需要涉及System.Drawing
。 - Nyergudspublic 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);
}