[c#] 경로로 선택한 이미지를 base64 문자열로 변환

사용자 컴퓨터의 경로에서 C #의 base64 문자열로 이미지를 어떻게 변환합니까?

예를 들어, 이미지에 대한 경로 (형식 C:/image/1.gif)가 있고 반환 data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..1.gif이미지를 나타내는 것과 같은 데이터 URI를 갖고 싶습니다 .



답변

이 시도

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

base4 이미지를 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);