1

以下は、画像の SHA1 HASH を取得するケースです。に変換するにはどうすればよいですかImage

参考までに、これは、以下のようなユーザー情報と SHA1 HASH 形式の写真を取得する XMPP コードです。

<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 内の写真の生の値を取得できるはずです。写真の値はbase64でエンコードされた文字列になるため、アバターデータを抽出する限り、文字列をbase64でバイナリバイト文字列またはバイト配列にデコードする必要があります.C#XMPPライブラリが提供するものはわかりません。

それを行った後、それを画像に変換することができます。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 に答える