1

在以下情况下,我得到了图像的 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# 的初学者,感谢您的帮助。

4

2 回答 2

8

你不能。SHA-1 哈希实际上只是图像的指纹 - 它不包含图像本身。

鉴于此扩展文档,其想法似乎是 vCard 包含实际数据 - 而 vCard 更新仅包含哈希,因此之前已经获取(并缓存)此图像的客户端可以检查其缓存版本是否仍然有效,如果没有,则获取完整数据。

第 3.2 节开始:

当接收方的客户端收到头像图像的哈希值时,它应该检查哈希值以确定它是否已经拥有该头像图像的缓存副本。如果不是,它会根据 XEP-0054 中描述的协议流程检索发送者的完整 vCard(注意这个请求是发送到用户的裸 JID,而不是完整的 JID)

于 2013-05-01T07:27:07.010 回答
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();

顺便说一句:SHA1 哈希只是为了比较图像是否与上次相比发生了变化:)

希望有帮助~~

于 2014-03-03T12:24:47.307 回答