2012-09-02 74 views
1

尝试将base64字符串转换为字节数组时,出现异常。我将图像转换为字节数组,然后转换为base64字符串,然后对其进行加密并将其存储在文件中。然后我试图将Base64字符串转换回MemoryStream中的一个字节数组,并重新创建图像。我在这里得到一个出现FormatException:将Base64字符串转换为字节时的FormatException

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

下面是两个主要功能的完整代码:

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==

任何想法,非常感谢!

回答

1

问题是你的字符串在线路某处损坏。这不是base64字符串,正如您可以通过第二个字符>所看到的那样,这不会发生在base64字符串中。


备注:你的函数创建一个包含数据的内存流,然后再将数据写入内存流。然后,您尝试从内存流中读取而不将位置重置到流的开头。

只需创建内存流并从中读取:

public Image StringToImage(String str) {    
    byte[] imgBytes = Convert.FromBase64String(str); 
    return Image.FromStream(new MemoryStream(imgBytes), true); 
} 
+0

阿好,我想通了..我是存储XML样式文件中的Base64字符串,我加密。在我的代码之间拉出XML标签之间的数据,我没有正确指定起始位置。这是拉动所有正确的数据,包括起始标签的最后2个字符。在这种情况下,'G>'。谢谢您的帮助! – gwin003