사용자 컴퓨터의 경로에서 C #의 base64 문자열로 이미지를 어떻게 변환합니까?
예를 들어, 이미지에 대한 경로 (형식 C:/image/1.gif
)가 있고 반환 data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..
된 1.gif
이미지를 나타내는 것과 같은 데이터 URI를 갖고 싶습니다 .
사용자 컴퓨터의 경로에서 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;
}
}
image.RawFormat
.
RawFormat
는 이미지 형식 지정자가 아닙니다. image
파일에서 이미지를 읽을 때 이미지가 어떤 형식 이었는지 반환하는 객체 의 속성입니다. 이 경우 gif 형식을 반환합니다. 따라서 실제 원본 파일의 바이트 대신 .Net 프레임 워크에 의해 gif에 다시 저장된 이미지의 바이트가 있다는 점을 제외하면 아무것도 변경되지 않습니다.
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)));
System.Drawing.Image
하려면 st를 사용할 수 있습니다. 이 같은 :var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));
더 복잡한 대답은 괜찮지 만 이것이 훨씬 낫다는 것을 알았습니다
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;
}
}
}
이것이 도움이되기를 바랍니다.
_image.RawFormat
)하지만 MIME 유형으로서 데이터를 노출image/jpg
이렇게하면 이미지를 전달한 다음 형식을 전달하는 것이 더 간단합니다.
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;
}
}
최고 투표 답변을 기반으로 C # 8 용으로 업데이트되었습니다. 다음은 기본적으로 사용할 수 있습니다. 명시 적으로 추가 System.Drawing
하기 전에 Image
하나 defaultly 다른 네임 스페이스의 클래스를 사용 될 수있다.
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;
}
다음과 같이 변환 할 수 있습니다.
string test = @"C:/image/1.gif";
byte[] bytes = System.Text.ASCIIEncoding.ASCII.GetBytes(test);
string base64String = System.Convert.ToBase64String(bytes);
Console.WriteLine("Base 64 string: " + base64String);
산출
QzovaW1hZ2UvMS5naWY=
그런 것
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
C#
질문 의 태그 를 눈치 챘 습니까?