【问题标题】:Image/Jpeg Base 64 to Image图片/Jpeg Base 64 转图片
【发布时间】:2014-09-09 15:44:17
【问题描述】:

我有这样的 image/jped base64 代码,

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA......

我需要,将此代码转换为图像并将文件保存为 jpeg 文件。我想到了 Windows 窗体(C#)。插入到文本框和按钮。在文本框中插入base 64代码(代码如上)并点击按钮。

private void button1_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(textBox1.Text))
        {
            string imageDataParsed = textBox1.Text.Substring(textBox1.Text.IndexOf(',') + 1);
            byte[] imageBytes = Convert.FromBase64String(imageDataParsed);

            MemoryStream ms1 = new MemoryStream(imageBytes);
            Image img = Image.FromStream(ms1);
            img.Save(Application.StartupPath + "\\Images\\1.jpg", ImageFormat.Jpeg);
        }
    }

文件另存为 jpeg。但是这个文件在 Windows 照片查看器上看起来像这样

但是当我在 Google Chrome 上运行这个 base 64 代码时,没有问题。在 Google Chrome 浏览器上查看不错。

总结我的问题,我需要 base64 代码到 Image 并将此文件保存为我的服务器作为 jpeg 文件。 我怎么解决这个问题? 谢谢。

【问题讨论】:

  • 来自文本框时是否有 base64 UrlEncoded 或其他特殊字符?
  • 到目前为止,您似乎还没有得到完整的字符串。请确保使用 small 的内联字符串和 complete 确实显示您观察到的行为的 base64 字符串示例更新您的示例。
  • 这段代码对我有用。我还尝试使用截断的 Base64 字符串(我认为这是你的问题),但我得到了 FormatException 并且图像没有保存。
  • @Alexei Levenkov 我有完整的代码。因为当我在 chrome 浏览器上测试时,这张图片显示完美。但是当我保存为文件时,没有显示完全相同的代码。
  • 我创建了一个简单的 jpeg 数据 url,它在被您的代码保存后在 chrome(作为 img 元素的 src)和 Windows 照片查看器中打开。看来你的形象有什么特别之处。您能否分享一下可以重现该问题的确切数据?

标签: c# image


【解决方案1】:

直接将Base64转换成文件,避免加载到Image中,这样应该和原图一样,当然这仍然不能解决你的图像显示问题。

byte[] newfile = Convert.FromBase64String(data);
File.WriteAllBytes(@"C:\path\to\file.jpg", newfile);

【讨论】:

  • 是的,你是对的。我现在测试了,没有解决我的图片显示问题吗? :(
  • 那么您的 base64 图像是损坏的 jpeg 图像,或者可能不是 jpeg 而是 png 或 gif?您应该在十六进制编辑器中检查标题我知道其他图像格式可能会显示在 Window Photo Viewer 中,但扩展名错误但会出现故障。
【解决方案2】:

我认为问题是大端和小端不匹配,请参阅http://en.wikipedia.org/wiki/Endianness

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多