1

base64文字列をバイト配列に変換しようとすると例外が発生します。画像をバイト配列に変換してからbase64文字列に変換し、暗号化してファイルに保存しています。次に、base64文字列をMemoryStreamのバイト配列に変換し直して、イメージを再作成しようとしています。ここでFormatExceptionが発生しています:

byte[] imgBytes = Convert.FromBase64String(str);

2つの主要な機能の完全なコードは次のとおりです。

public string ImageToString(Image img)
{
     using (MemoryStream ms = new MemoryStream())
     {
          img.Save(ms, ImageFormat.Jpeg);

          return Convert.ToBase64String(ms.ToArray());
     }
}

public Image StringToImage(String str)
{            
     int lent = str.Length;
     byte[] imgBytes = Convert.FromBase64String(str);
     MemoryStream ms = new MemoryStream(imgBytes, 0, imgBytes.Length);

     ms.Write(imgBytes, 0, imgBytes.Length);
     return Image.FromStream(ms, true);
}

これが、変換しようとしているbase64文字列の最初と最後です。 G>/9j/4AAQSkZJRgABAQEAYABgAAD .... Uh+8fxpT/B9KAP/2Q==

どんなアイデアでも大歓迎です!

4

1 に答える 1

1

問題は、文字列が行のどこかで破損したことです。2番目の文字でわかるように>、これはbase64文字列ではありません。これは、base64文字列では発生しません。


補足:関数は、データを含むメモリストリームを作成してから、データをメモリストリームに再度書き込みます。次に、ストリームの先頭に位置をリセットせずに、メモリストリームから読み取ろうとします。

メモリストリームを作成し、そこから読み取るだけです。

public Image StringToImage(String str) {            
  byte[] imgBytes = Convert.FromBase64String(str);
  return Image.FromStream(new MemoryStream(imgBytes), true);
}
于 2012-09-02T00:54:21.657 に答える