web-dev-qa-db-fra.com

Convertir le chemin de l'image en chaîne base64

Comment convertir une image en chaîne base64 en C #?

Par exemple, j'ai le chemin d'accès à l'image C:/image/1.gif et je voudrais que data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD.. soit renvoyé.

88
A.J

Essaye ça

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;
    }
}
158
Nitin Varpe

Obtenez le tableau d'octets (byte[]) de l'image, puis utilisez Convert.ToBase64String(), st. comme ça:

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

Pour reconvertir une image base4 en System.Drawing.Image:

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

Depuis la plupart d'entre nous aiment les oneliners:

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

Si vous en avez besoin comme tableau d'octets Base64:

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

Bien que la réponse la plus compliquée est ok, je trouve que c'est beaucoup mieux

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

C'est simple, vous n'avez pas besoin de réenregistrer et de gérer différents formats

11
KansaiRobot

C'est la classe que j'ai écrite à cet effet:

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();
6
Jeremy Bell

Vous pouvez facilement passer le chemin de l'image pour récupérer la chaîne 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;
            }
        }
    }

J'espère que cela aidera.

4
sumith madhushan

Vous pouvez utiliser Server.Map chemin pour donner un chemin relatif. Vous pouvez ensuite créer une image à l'aide de la conversion base64 ou vous pouvez simplement ajouter la chaîne base64 à image src.

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

string base64ImageRepresentation = Convert.ToBase64String(imageArray);
2
nikunjM

De cette façon, c'est plus simple, où vous passez l'image, puis le format.

private static string ImageToBase64(Image image)
{
    try
    {
        var imageStream = new MemoryStream();
        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!";
    }
}
1
Elias Filipe