在C#中,将gif文件转换为byte[]的两种不同方法

本文关键字:两种 方法 byte gif 转换 文件 | 更新日期: 2023-09-27 18:24:29

我想将gif文件转换为byte[]。

我试了两种方法,但结果不一样。哪一个是对的?

方法1:

使用CCD_ 1;这返回一个字节数组。

方法2:

 private byte[] ImageToBytes(Image image, ImageFormat format)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, format);
                return ms.ToArray();
            }
        }
Bitmap image = new Bitmap(@"c:''1.gif"); 

然后致电
bytes = ImageToBytes(image, ImageFormat.Gif);

这两个字节有点不同。我应该信任哪一个?

在C#中,将gif文件转换为byte[]的两种不同方法

您的"方法2"正在重新编码/重新压缩文件。它可能会有很大的不同,而且(很可能)质量会下降。

两者都是"正确的",因为它们是你告诉计算机做的事情的结果。一个是直接来自文件的字节数组,另一个是解码文件并重新编码的结果,这可能最终是完全相同的数组,或者大不相同。你想要的可能是第一个,因为它明显更快,因为它不需要经过解码/编码过程,并保留原始数据。我能想到使用第二个的唯一原因是,如果出于某种原因,您真的需要分析.NET gif编码过程的输出。

第二个选项与下面的选项相同,只是不需要临时文件,因为它在内存中执行所有操作。所以你所要做的就是加载它,然后保存它,然后再加载它。

Bitmap image = new Bitmap(@"c:'1.gif"); 
image.Save("c:'1_temp.gif", ImageFormat.Gif);
bytes = File.ReadAllBytes(@"c:'1_temp.gif");