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.gif
afbeelding 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.Map
gebruiken om een relatief pad te geven en vervolgens kunt u een afbeelding maken met behulp van base64
-conversie of u kunt gewoon base64
tekenreeks 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.Drawing
toegevoegd voor Image
aangezien 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