我的情况是我正在获取图像的SHA1 HASH。现在我该如何将其转换为Image
。
有关您的信息,这是XMPP代码,我将获得如下的用户信息和SHA1 HASH格式的照片。
<presence from='juliet@capulet.com/balcony'>
<x xmlns='vcard-temp:x:update'>
<photo>sha1-hash-of-image</photo>
</x>
</presence>
我是C#的初学者,感谢您的帮助。
答案 0 :(得分:8)
你做不到。 SHA-1 hash实际上只是图像的指纹 - 它不包含图像本身。
鉴于this extension document看起来这个想法是vCard包含实际数据 - 而vCard更新只包含散列,因此已经获取(和缓存)的客户端此图像之前可以检查其缓存版本是否仍然有效,如果没有,则获取完整数据。
来自section 3.2:
当收件人的客户端收到头像图像的哈希值时,它应该检查哈希值以确定它是否已经拥有该头像图像的缓存副本。如果没有,它会根据XEP-0054中描述的协议流检索发送方的完整vCard(请注意,此请求将发送给用户的裸JID,而不是完整的JID)
答案 1 :(得分:0)
如果你想获得一个用户的VCard,你应该使用他们的jid(或者扩展的jid ...加载该用户的VCard ...我不知道C#xmpp库需要加载一个VCard)。
但是,一旦加载了VCard,您应该能够在XML中获取照片的原始值。 photo的值将是base64编码的字符串,因此你应该将字符串base64解码为二进制字节字符串或字节数组,再次不知道C#XMPP lib提供什么,就提取头像数据而言。
执行此操作后,您可以将其转换为图像。在java中,这样做:
VCard vcard = new VCard(xmppConnection);
try {
vcard.load("someone@xmpp-server-somewhere.com");
} catch (XMPPException e) {}
byte[] avatar = vcard.getAvatar();
BTW:SHA1哈希只是比较以查看图像是否从上次更改:)
希望有所帮助~~