【问题标题】:Is it possible to load and encode images to base64 fast in C#?是否可以在 C# 中快速将图像加载和编码为 base64?
【发布时间】:2016-06-23 11:23:25
【问题描述】:

我想加载一个图像并将其直接编码为 base64 字符串。小/低分辨率图片加载速度很快,但加载由 iPhone 5 拍摄的图片(2448 x 3264, 2.61 MB)需要很长时间。有没有办法在我的应用程序中更快地加载这些图像?

这是我的 C# 代码:

private void button1_Click(object sender, EventArgs e)
    {
        Stream myStream = null;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        //Setup OpenFileDialog

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {
                using (myStream)
                {
                    string sFileName = openFileDialog1.FileName;
                    textBox1.Text = sFileName;
                    pictureBox1.ImageLocation = sFileName;
                    using (Bitmap bm = new Bitmap(sFileName))
                    {
                        using (var ms = new MemoryStream())
                        {
                            bm.Save(ms, ImageFormat.Jpeg);
                            base64 = Convert.ToBase64String(ms.ToArray());
                            textBox3.Text = base64;
                        }
                    }
                }
            }
        }
    }

【问题讨论】:

  • Image.FromFile() 可以帮到你很多
  • 大量不必要的昂贵代码。当您可以按原样使用文件时,使用 Bitmap 类没有任何意义。用 5.2 兆字节的字符串让 TextBox 类心脏病发作毫无意义。当您可以使用 MemoryStream.GetBuffer() 时,使用 MemoryStream.ToArray() 毫无意义。
  • 你想用base64的图像归档什么?
  • 好的。这里的翻译丢失了一些东西。 没有合理的理由对任何内容进行base64编码并然后使用AES对其进行加密。反过来(加密然后base 64),是的。但是这样一来,不行。一点也不。
  • 一般来说,加密会将一组任意字节转换为另一组任意字节。它们的具体价值或意义无关紧要。因此,在这种情况下,输入可以轻松通过ms.ToArray() 返回的数组。您首先通过base-64编码该字节数组所做的只是增加需要由三分之一加密的数据量 - 而作为输出得到的仍然是任意字节集 - 所以如果你需要加密的 输出 可以处理,例如您必须使用例如执行 second 轮编码的文本基数 64。

标签: c# image winforms base64


【解决方案1】:

是的,您使用的方法可能是我见过的最流行的方法。我也需要转换图像,所以我用同样的方法写了一些东西。 但是,这对我来说效率太低太慢了。我决定寻找解决方法。我发现这个由John Walker 用C 编写的小程序叫做base64.exe。我围绕它做了一个包装,并对输出进行了一些修改。

结果是Base64encoder,不过写的时间比较久。我在这里上传了源代码:Base64encoder_v2.1-source.zip(根据 MIT 许可证发布)

我后来制作了一个 C 库,可以在这里找到:https://github.com/joedf/base64.c(在 MIT 许可下发布)

您可以分叉包装器或将 c 库分叉到 c# 库中,或者使用其他库或从头开始编写一些东西...:/

【讨论】:

    【解决方案2】:

    建议不要将大尺寸图片转成Base64.. 如果您尝试 base64 更大的图像,您最终会在 html 中使用大量代码并失去性能优势...

    参考this & this

    【讨论】:

    • 我根本不用 HTML,它是一个 windows 窗体程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多