将图像转换为base64并检查大小

5
我正在使用以下C#代码将图像文件转换为Base64字符串。
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[fs.Length];
            fs.Read(buffer, 0, (int)fs.Length);
            var base64 = Convert.ToBase64String(buffer);
        }

我该如何测试转换前后的大小?即图片文件大小和base 64字符串的大小。我想检查是否通过转换赢得了更多的空间。


尝试使用var buffer = File.ReadAllBytes(filename);来读取缓冲区。 - Jim Mischel
2个回答

9
您可以使用简单的数学计算来计算它。每个base64字符表示6位,因此四个字符表示三个字节。因此,每个字符可以得到3/4个字节。这就是:
int base64EncodedSize = 4 * originalSizeInBytes / 3;

根据数据的填充方式,可能会多出一个或两个字符,但这不会有影响。

此外,如果您认为base64可能更有效率,那么您正在与什么进行比较呢?与原始二进制相比,它总是会导致大小增加33%。


实际上是167%的增长,因为Convert.ToBase64String返回一个Unicode字符串。 - MusiGenesis
@MusiGenesis:...当使用适当的传输编码(UTF-8)进行编码时,它不会占用比如 Latin-1 字符串更多的空间。 - Matti Virkkunen
是的,但是 while 它仍然是 .Net 字符串时,它的大小会增加一倍。我不确定这个人想要实现什么,但你说得对,他们可能正在将其发送到某个地方,而不是将其保留在内存中或将其写入 DB 文本字段中等。 - MusiGenesis

0

你正在失去 - 使用base64字符串储存图像所需的字节数比原始图像更多。如果这一切都在内存中,可能会使用更多字节,特别是如果是在.Net框架下使用字符串,因为它们是Unicode编码,所以它们使用的字节数是ASCII编码的两倍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接