FormatException при преобразовании строки Base64 в байты

Я получаю исключение при попытке преобразовать строку base64 в массив байтов. Я преобразовываю изображение в массив байтов, затем в строку base64, затем шифрую его и сохраняю в файле. Затем я пытаюсь преобразовать строку base64 обратно в массив байтов в MemoryStream и воссоздать изображение. Я получаю 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==

Любые идеи приветствуются!


person gwin003    schedule 02.09.2012    source источник


Ответы (1)


Проблема в том, что ваша строка была повреждена где-то вдоль линии. Это не строка base64, как вы можете видеть по второму символу >, который не встречается в строке base64.


Боковое примечание: ваша функция создает поток памяти, содержащий данные, а затем снова записывает данные в поток памяти. Затем вы пытаетесь прочитать из потока памяти, не сбрасывая позицию в начало потока.

Просто создайте поток памяти и прочитайте из него:

public Image StringToImage(String str) {            
  byte[] imgBytes = Convert.FromBase64String(str);
  return Image.FromStream(new MemoryStream(imgBytes), true);
}
person Guffa    schedule 02.09.2012
comment
Ах, хорошо, я понял. Я хранил строку base64 в файле стиля XML, который я зашифровал. В моем коде для извлечения данных между тегами XML я неправильно указал начальную позицию. Он вытягивал все правильные данные, включая последние 2 символа начального тега. В данном случае «G›». Спасибо за помощь! - person gwin003; 02.09.2012