1

JPEGで画像をシリアル化していc#.netます。私は単にそれをバイトストリームに変換し、Web サービスを介して送信しています。

シリアル化されたバイト ストリームは、実際の画像のサイズの 30 倍以上であることがわかりました。シリアル化して実際の画像のサイズに相対的に維持するため のより良いアプローチを提案できる人はいますか?

4

7 に答える 7

2

JPEGは圧縮技術であり、読み込むと大幅に拡張されることが期待されます。これがファイル形式の性質です。最初に画像として読み取らずに、元のJPEGファイルを送信する方法を見つけてください。

于 2008-09-16T05:47:24.523 に答える
2
  1. FileStreamを使用して元の画像ストリームを読み取り、MemoryStreamを使用してシリアライザーに渡す必要があります。
  2. Imageクラスしか使用できない場合は、受信するバイト配列の出力形式を指定してみてください。
于 2008-09-16T05:53:05.400 に答える
1

WCF ストリーミングの使用を検討してください。このサービスを介してファイルを送信するオーバーヘッドに気付きませんでした。

MSDN:

大規模データとストリーミング

于 2008-09-16T06:03:32.317 に答える
0

たぶん、Webサーバーで画像をホストし、シリアル化された画像ではなく、Webサービスの応答でURLを送信するだけです。これにより、クライアントは可能な場合に画像をローカルにキャッシュすることもできます。

于 2008-09-16T06:17:06.777 に答える
0

免責事項:知識のない人が話す
オープン性/標準とパフォーマンスの間のトレードオフ..データパケットに多くのプロトコルオーバーヘッドバイトを追加するSOAPのようなものを使用している可能性があります。サイズが重要な制約である場合は、純粋なバイナリストリームとして送信してみてください...実際の構文は、他の誰かが提案できる可能性があります。

于 2008-09-16T05:44:49.287 に答える
0

また、Web サービスで送信する画像のサイズが大きくなる可能性がある場合は、MTOM を検討してみてください。バイナリ添付のメッセージのサイズを最適化するのは WS-* 標準です。Java 用の Axis2 や Metro などのスタック、または .NET に非常に統合されています。

http://msdn.microsoft.com/en-us/library/aa528822.aspx (wse 3.0) http://msdn.microsoft.com/en-us/library/ms733742.aspx (wcf)

于 2008-09-16T06:03:02.723 に答える
-2

それを Base64String に変換してみませんか?

byte[] arr = File.ReadAllBytes(filename);
string str = Convert.ToBase64String(arr);

もう一方の端では、次のように変更して byte[] に戻すことができます。

byte[] arr = Convert.FromBase64String(string);
于 2008-09-16T06:04:17.697 に答える