Для стороннего проекта я пытаюсь сделать простой исполняемый файл, который принимает 2 аргумента:Преобразование Base64 строку GIF изображения
- путь текстовый файл (содержит кодировкой Base64 анимированный GIF) (пример base.txt)
- Название GIF для экспорта (например hello.gif)
Так я имею в виду, это все должны идти так:
- Это открывает и читает данные из файла
- Он принимает данные и декодирует строку Base64
- Затем он сохраняет данные в виде анимированного GIF
Теперь, конечно, есть некоторые промежуточные шаги, которые необходимо но я не думаю, что мне нужно это сделать на данный момент.
Так что в конце концов я остался со следующим файлом C#, который должен делать то, что я хочу.
using System;
using System.Drawing;
using System.Text;
using System.IO;
namespace Base642Img
{
class MainClass
{
public static void Main (string[] args)
{
if (args.Length == 2) {
byte[] buffer;
String imageData;
FileStream fileStream = new FileStream (args [0], FileMode.Open, FileAccess.Read);
try {
int length = (int)fileStream.Length;
buffer = new byte[length];
int count;
int sum = 0;
while ((count = fileStream.Read (buffer, sum, length - sum)) > 0) {
sum += count;
}
} finally {
fileStream.Close();
}
try{
imageData = Encoding.UTF8.GetString (buffer, 0, buffer.Length);
imageData = imageData.Replace (System.Environment.NewLine, "");
byte[] imageBytes = System.Convert.FromBase64String (imageData);
MemoryStream ms = new MemoryStream (imageBytes, 0, imageBytes.Length);
ms.Write (imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream (ms, true);
image.Save (args [1], System.Drawing.Imaging.ImageFormat.Gif);
} catch (Exception e) {
Console.WriteLine (e.ToString());
}
} else {
Console.WriteLine ("Incorrect number of arguments");
}
}
}
}
Это прекрасно подходит для MonoDevelop. Но когда я иду, чтобы запустить файл (учитывая два аргумента) он выплевывает следующее исключение:
System.FormatException: Invalid length.
at (wrapper managed-to-native) System.Convert:InternalFromBase64String (string,bool)
at System.Convert.FromBase64String (System.String s) [0x00000] in <filename unknown>:0
at Base642Img.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0
Я совершенно не знаю, что это говорит, и все мои поиски на Google оказались пустым, так что я теперь переходим к Stack Overflow, надеясь, что кто-то может мне помочь.
Это означает, что 'imageData' не содержит допустимую строчную кодировку с базой 64. –
Но он делает o.O. Все ранее существовавшие преобразователи могут легко считывать данные из файла. Возможно, что-то я делаю неправильно, читая его, что делает недействительной строку? –
Перед выполнением этой строки вы можете отлаживать и видеть, что значения 'imageData.Length',' imageData [0] ',' imageData [1] ',' imageData [imageData.Length - 2] 'и' imageData [imageData.Length - 1] 'есть? –