두 가지 방법이 있습니다. 하나는 이미지를 Base64 문자열로 변환하여 XML 태그에 저장할 수 있고 다른 하나는 Base64 문자열을 영상. 이미지를 문자열로 변환하고 XML에 저장할 수 있지만 문자열을 이미지로 변환하려고하면 다음 오류가 발생합니다. "GZip 헤더의 매직 번호가 올바르지 않습니다. GZip 스트림을 전달하고 있는지 확인하십시오. "오류 : GZip 헤더의 마법 번호가 올바르지 않음
해결 방법에 대한 의견이 있으십니까?
public static string ConvertToBase64String(Image Image, ImageFormat Format)
{
MemoryStream stream = new MemoryStream();
Image.Save(stream, Format);
byte[] imageBytes = stream.ToArray();
MemoryStream memStream = new MemoryStream();
GZipStream zipStream = new GZipStream(memStream, CompressionMode.Compress);
zipStream.Write(imageBytes, 0, imageBytes.Length);
string imageString = Convert.ToBase64String(imageBytes);
stream.Close();
memStream.Close();
return imageString;
}
public static Image Base64StringToImage(string ImageArray)
{
byte[] base64String = Convert.FromBase64String(ImageArray);
MemoryStream memStream = new MemoryStream(base64String);
GZipStream zipStream = new GZipStream(memStream, CompressionMode.Decompress);
zipStream.Read(base64String, 0, base64String.Length);
ImageConverter ic = new ImageConverter();
Image image = (Image)ic.ConvertFrom(base64String);
memStream.Close();
return image;
}
압축되지 않은 데이터의 크기를 어떻게 알 수 있습니까? 압축 해제에 적합한 것으로 생각되는 임의의 크기의 바이트를 생성해야합니까? 숫자가 꽤 클 수 있도록 이미지를 다루고 있습니다. – Icono123
@ Icono123 : GZipStream에 크기를 요청할 수 있는지 확인하십시오. 그렇지 않으면 유일한 옵션은 데이터와 함께 원래 크기를 저장하는 것입니다. 그렇게 할 수 없다면 스트림을 읽을 때 더 많은 데이터를 할당해야합니다. MemoryStream을 사용하여이를 수행 할 수 있습니다. – Guffa