Een afbeelding (geselecteerd op pad) converteren naar base64 string

Hoe converteert u een afbeelding van een pad op de computer van de gebruiker naar een base64-tekenreeks in C#?

Ik heb bijvoorbeeld het pad naar de afbeelding (in de indeling C:/image/1.gif) en zou graag een gegevens-URI hebben zoals data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..die de 1.gifafbeelding vertegenwoordigt die wordt geretourneerd.


Antwoord 1, autoriteit 100%

Probeer dit

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

Antwoord 2, autoriteit 65%

Verkrijg de byte-array (byte[]) representatie van de afbeelding en gebruik vervolgens Convert.ToBase64String(), st. zoals dit:

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

Een base64-afbeelding terug converteren naar een System.Drawing.Image:

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

Antwoord 3, autoriteit 15%

Omdat de meesten van ons van oneliners houden:

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

Als je het nodig hebt als Base64 byte-array:

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

Antwoord 4, autoriteit 4%

Dit is de les die ik voor dit doel heb geschreven:

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

Antwoord 5, autoriteit 4%

Je kunt het pad van de afbeelding gemakkelijk doorgeven om de base64-string op te halen

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

Hopelijk helpt dit.


Antwoord 6

U kunt het pad Server.Mapgebruiken om een ​​relatief pad te geven en vervolgens kunt u een afbeelding maken met behulp van base64-conversie of u kunt gewoon base64tekenreeks naar image src.

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

Antwoord 7

Gebaseerd op het meest gestemde antwoord, bijgewerkt voor C# 8. Het volgende kan direct worden gebruikt. Expliciete System.Drawingtoegevoegd voor Imageaangezien men die klasse standaard uit een andere naamruimte zou kunnen gebruiken.

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

Antwoord 8

Op die manier is het eenvoudiger, waar u de afbeelding doorgeeft en vervolgens het formaat doorgeeft.

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

Antwoord 9

Het volgende stukje code werkt voor mij:

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

Antwoord 10

Het omgekeerde hiervan voor de googlers die hier aankomen (er is geen SO vraag/antwoord op)

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

Antwoord 11

Zoiets

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

Other episodes