图像的Base64解码给出了红色问号

时间:2013-05-29 16:25:16

标签: c# base64 unity3d

我使用unity3d中的base64字符串对facebook缩略图图像数据进行编码和解码。当用户没有个人资料照片时,生成的图像是红色问号。有没有办法认识到发送了无效图片,以便我可以用我选择的默认图片替换它?

Result obtained by decoding facebook profile pic when the person does not have one

我正在使用c#中的Convert.FromBase64String(字符串编码)将字符串转换为图像数据。

3 个答案:

答案 0 :(得分:1)

我假设您使用某些API从URL检索base64编码的字符串?

在这种情况下,您可以将检索到的字符串一次转储到控制台,然后将其复制到源代码中,并将其与将来获得的字符串进行比较。当然,如果您使用的facebook API决定提供不同的图标,这将会中断,在这种情况下,您必须转储新的“未知用户”缩略图。

string encoded = ... // however you obtain your thumbnail
print encoded; // dump the string to the console once. remove this statement later
if (encoded == "...here comes the (rather large) string you just copied")
    encoded = "...here comes some other image you like to use, encoded as string";
...

不是很优雅,但至少很容易实现。

答案 1 :(得分:0)

我想,如果在没有配置文件图片时可以预测到错误图像(例如“红色问号”图像),则可以简单地测试该情况并替换为您选择的另一个图像。您可以选择将红色问号图像存储为资源,然后将其Base64字符串与从请求返回的每个图像的Base64进行比较。

在这种情况下,代码的关键位可能看起来像这样(假设您已经将图像的Base64字符串存储在资源中):

ResourceManager rm =
    new ResourceManager("ExampleAppData", typeof(ExampleApp).Assembly);

String errorImageBase64 = rm.GetString("ErrorImageBase64");

// the image you get from your request
String resultImageBase64 = GetProfileImageBase64();

Image missingProfile;
if(resultImageBase64.Equals(errorImageBase64))
{
    missingProfile = ImageFromBase64String(rm.GetString("MissingProfileBase64"));
}
else
{
    missingProfile = ImageFromBase64String(resultImageBase64);
}

参考文献:
http://msdn.microsoft.com/en-us/library/2xsy4hac.aspx
http://ozgur.ozcitak.com/snippets/2009/12/21/base64-encoding-an-image-with-csharp.html

答案 2 :(得分:0)

根据我的经验,这是由于请求错误所致。 以我为例,返回红色问号的错误API查询为/{fbId}/picture?g&type=square&height=128&width=128 我解决了删除“?g”的问题,现在的工作查询是 /{fbId}/picture?type=square&height=128&width=128