通过JSON/PHP(base64_encode)从基于图像的C#中解释base 64

Gee*_*esu 3 php c# base64 json

所以我能够成功读取图像文件,并将其传递回我的C#应用​​程序,但我无法正确解码.

我通过PHP返回JSON数据(json_encode函数未显示):

        $imgbinary = fread(fopen($filename, "r"), filesize($filename));

        if ( strlen($imgbinary) > 0 ){
            return array("success"=>true, "map"=>base64_encode($imgbinary));
        }
Run Code Online (Sandbox Code Playgroud)

然后在C#中我使用Newtonsoft.Json来解码字符串(我可以成功读取成功和地图属性),但是我无法使用base64解码将图像正确地写入文件(或显示).

我是这样做的:

File.WriteAllText(System.Windows.Forms.Application.StartupPath + "\\MyDir\\" + FileName, Base64Decode(FileData));

    public string Base64Decode(string data)
    {
        byte[] binary = Convert.FromBase64String(data);
        return Encoding.Default.GetString(binary);
    }
Run Code Online (Sandbox Code Playgroud)

我在这里想念一些疯狂的东西吗?真正奇怪的是我解码数据后,文件大小比原始文件大.(我知道一旦你编码,数据增加了大约33%,奇怪的是,在我解码后,它仍然更大).

任何帮助/指针将不胜感激!

Jon*_*eet 9

我在这里想念一些疯狂的东西吗?

是.图像不是文本文件,因此您不应该使用File.WriteAllText.您认为图像文件中存在哪些字符?区分数据基本上是文本的时间和基本上是二进制的数据确实非常重要.如果你试图把它当作另一个对待,那你就是在寻找麻烦.

不要将字节数组转换回文本(您的Encoding.Default.GetString调用将丢失数据) - 只需使用:

File.WriteAllBytes(path, Convert.FromBase64String(data));
Run Code Online (Sandbox Code Playgroud)