C# Base64字符串转换为JPEG图像

62

我正在尝试将Base64字符串转换为需要本地保存的图像。

目前,我的代码能够保存图像,但是当我打开保存的图像时,它会显示“无效的图像”。

输入图像描述

代码:

try
{
    using (var imageFile = new StreamWriter(filePath))
    {
        imageFile.Write(resizeImage.Content);
        imageFile.Close();
    }
}

Content是一个包含Base64字符串的string对象。


2
你可以使用 Convert.FromBase64String 方法获取一个字节数组。然后,你可以将其加载到 MemoryStream 中,或者将该数组作为输入传递给 Image,或者将其写入到 File 中。但是,如果你提供已有的代码,将会非常有帮助。 - Paul Farry
我能看到有多个问题。首先,你没有编写二进制文件。你似乎也没有在任何地方解码base64。 - Simon Whitehead
啊哈,谢谢。我会尝试的。 - Subby
@ByteBlast - 抱歉,我以为我已经粘贴了代码,但实际上没有,然后发布了问题。 - Subby
4个回答

107

首先,将base 64字符串转换为 Image,然后使用 Image.Save 方法。

要从base 64字符串转换为 Image

 public Image Base64ToImage(string base64String)
 {
    // Convert base 64 string to byte[]
    byte[] imageBytes = Convert.FromBase64String(base64String);
    // Convert byte[] to Image
    using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
    {
        Image image = Image.FromStream(ms, true);
        return image;
    }
 }

Image转换为Base 64字符串:

public string ImageToBase64(Image image,System.Drawing.Imaging.ImageFormat format)
{
  using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();

    // Convert byte[] to base 64 string
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
  }
}

最后,您可以轻松地调用Image.Save(filePath);保存图像。


如果解决了你的问题,请随时回复并将其标记为答案,不客气。同样也祝你一切顺利 :) - Monah
2
+1 对于这个反向解决方案。我正在寻找它。 :-) - shashwat
1
这里的ms.Write(imageBytes, 0, imageBytes.Length)不是多余的吗?似乎MemoryStream ms = new MemoryStream(imageBytes)将创建MemoryStream并使用imageBytes进行初始化,因此不需要Write()。 - Crulex
谢谢你的提示,我回答时那段代码没有经过测试,我会在答案中添加注释。 - Monah
@Kartiikeya 图像属于 "System.Drawing" 而不是 system.windows.controls。 - Monah
显示剩余8条评论

95

所以根据您提供的代码。

var bytes = Convert.FromBase64String(resizeImage.Content);
using (var imageFile = new FileStream(filePath, FileMode.Create))
{
    imageFile.Write(bytes ,0, bytes.Length);
    imageFile.Flush();
}

1
谢谢Paul。那真是太神奇了。我现在明白我必须转换/解码字符串。 - Subby
谢谢,这对我来说很有效,可以将Microsoft Graph附件JSON回复的contentBytes字符串转换为实际文件。现在我可以保存我的附件到真正的文件中了。 - bert

8
public Image Base64ToImage(string base64String)
{
   // Convert Base64 String to byte[]
    byte[] imageBytes = Convert.FromBase64String(base64String);
    MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

    // Convert byte[] to Image
    ms.Write(imageBytes, 0, imageBytes.Length);
    Image image = Image.FromStream(ms, true);

    return image;
}

3
你能否也加上一个解释? - Robert

0

前端:

  <Image Name="camImage"/>

返回:

 public async void Base64ToImage(string base64String)
        {
            // read stream
            var bytes = Convert.FromBase64String(base64String);
            var image = bytes.AsBuffer().AsStream().AsRandomAccessStream();

            // decode image
            var decoder = await BitmapDecoder.CreateAsync(image);
            image.Seek(0);

            // create bitmap
            var output = new WriteableBitmap((int)decoder.PixelHeight, (int)decoder.PixelWidth);
            await output.SetSourceAsync(image);

            camImage.Source = output;
        }

如何将图像转换为字节? - Eng Soon Cheah

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