簡體   English   中英

將圖像(按路徑選擇)轉換為 base64 字符串

[英]Convert an image (selected by path) to base64 string

如何將圖像從用戶計算機上的路徑轉換為 C# 中的 base64 字符串?

例如,我有圖像的路徑(格式C:/image/1.gif )並希望有一個數據 URI,例如data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD.. 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;
    }
}

獲取圖像的字節數組 ( 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)));

由於我們大多數人都喜歡oneliners:

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

如果您需要它作為 Base64 字節數組:

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

盡管更復雜的答案是可以的,但我發現這樣做要好得多

var base64String= Convert.ToBase64String(File.ReadAllBytes(pathOfPic));

很簡單,您無需重新保存和處理不同的格式

這是我為此目的編寫的類:

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();

您可以輕松傳遞圖像的路徑以檢索 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;
            }
        }
    }

希望這會有所幫助。

您可以使用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;
    }
}

以下代碼對我有用:

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

如何將圖像從用戶計算機上的路徑轉換為C#中的base64字符串?

例如,我有圖像的路徑(格式為C:/image/1.gif ),並希望有一個數據URI,例如data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..代表1.gif圖片返回。

類似的東西

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM