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==
Любые идеи с благодарностью!
1 ответ
Проблема в том, что ваша строка была повреждена где-то вдоль линии. Это не строка base64, как вы можете видеть по второму символу >
, который не встречается в строке base64.
Примечание: Ваша функция создает поток памяти, содержащий данные, а затем снова записывает данные в поток памяти. Затем вы пытаетесь прочитать из потока памяти без сброса позиции в начале потока.
Просто создайте поток памяти и прочитайте из него:
public Image StringToImage(String str) {
byte[] imgBytes = Convert.FromBase64String(str);
return Image.FromStream(new MemoryStream(imgBytes), true);
}