我使用unity3d中的base64字符串对facebook缩略图图像数据进行编码和解码。当用户没有个人资料照片时,生成的图像是红色问号。有没有办法认识到发送了无效图片,以便我可以用我选择的默认图片替换它?
我正在使用c#中的Convert.FromBase64String(字符串编码)将字符串转换为图像数据。
答案 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