【发布时间】:2017-02-03 00:39:50
【问题描述】:
我正在尝试编写代码以将 GIF 动画文件转换为 base64 字符串,然后将其从 base 64 字符串转换回图像。我编写的代码适用于标准图像文件(即位图、JPEG、GIF)。然而,动画 GIF 是不同的,显然需要不同的步骤。
这是我为将图像转换为 base64 字符串而编写的代码:
if (pbTitlePageImage.Image != null)
{
// This is the step-by-step for writing an image to binary.
string Image2BConverted;
using (Bitmap bm = new Bitmap(pbTitlePageImage.Image))
{
using (MemoryStream ms = new MemoryStream())
{
BinaryWriter bw = new BinaryWriter(ms);
bm.Save(ms, ImageFormat.Jpeg);
Image2BConverted = Convert.ToBase64String(ms.ToArray());
GameInfo.TitlePageImage = Image2BConverted;
bw.Close();
ms.Close();
GameInfo.TitlePageImagePresent = true;
ProjectNeedsSaving = true;
}
}
}
这是我为将 base64 字符串转换回图像而编写的代码:
{
byte[] TitlePageImageBuffer = Convert.FromBase64String(GameInfo.TitlePageImage);
MemoryStream memTitlePageImageStream = new MemoryStream(TitlePageImageBuffer, 0, TitlePageImageBuffer.Length);
memTitlePageImageStream.Write(TitlePageImageBuffer, 0, TitlePageImageBuffer.Length);
memTitlePageImageStream.Position = 0;
pbTitlePageImage.Image = Bitmap.FromStream(memTitlePageImageStream, true);
memTitlePageImageStream.Close();
memTitlePageImageStream = null;
TitlePageImageBuffer = null;
}
将base64字符串转换回图像后,必须将其加载到图片框中。上面的代码示例将起作用,但只有动画链中的第一个图像才能通过,因此如果动画出现在图片框中,则它是唯一的部分。我需要编写处理整个动画的代码。提前致谢!
【问题讨论】:
-
这个问题可能会部分回答这个问题:stackoverflow.com/questions/8763630/…
-
谢谢,丹,但我还需要更多信息。主要是,我需要知道动画 GIF 是否被全部转换为 base 64 字符串,以及如何在将其放入图片框之前将其完全传递到字节数组或类似类型中。
-
明白。我有一种感觉,该帖子可能只能解释一些故事,如果有的话。您是否可以使用 FileStream 打开整个文件并将其放入 MemoryStream 中? Bitmap.FromStream 将转换它,但 FileStream 将读取原始字节。
-
文件流?我会试试看。在尝试编写代码之前,我还需要知道是否应该首先确定 .gif 文件是单个图像还是动画。或者只要它的文件扩展名是“.gif”,这有关系吗?
-
如果只是使用 FileStream 而根本不解释它,你真的不需要知道关于下面的数据的任何信息 - 除非可能确保文件实际上是一个 gif。为此,如果您检查前四个字节并查看 GIF8,则 99.9% 的情况都可以。