如何获得更紧凑的图像序列化?

时间:2008-09-16 05:41:56

标签: .net web-services serialization

我在c#.net中序列化JPEG图像。我只是将其转换为字节流并通过Web服务发送。我观察到序列化字节流是实际图像大小的30倍。任何人都可以建议我更好的方法来序列化和保持相对于实际图像的大小?

7 个答案:

答案 0 :(得分:2)

JPEG是一种压缩技术,一旦你阅读它,它就会大大扩展。这就是文件格式的本质。尝试找到一种发送原始JPEG文件的方法,而不首先将其作为图像读取。

答案 1 :(得分:2)

  1. 您需要使用FileStream读取原始图像流,然后使用MemoryStream将其传递给Serializer。
  2. 如果您只能使用Image类,请尝试指定您正在接收的字节数组的输出格式。

答案 2 :(得分:1)

考虑使用WCF streaming。我没有注意到通过这项服务传输文件的开销。

MSDN:

Large Data and Streaming

答案 3 :(得分:0)

免责声明:非知情人士发言
它是开放性/标准和性能之间的权衡。也许你正在使用类似SOAP的东西,它会在数据包中增加许多协议开销字节。如果大小是一个重要的约束,尝试将其作为纯二进制流发送...实际的语法也许其他人可以投入。

答案 4 :(得分:0)

如果您通过网络服务发送的图像大小可能很大,也许您可​​以查看MTOM。使用二进制附件优化消息大小是WS- *标准。它现在非常集成在像Axis2或Metro for Java或.NET中的堆栈中:

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

答案 5 :(得分:0)

也许只是在Web服务器上托管图像并在Web服务回复中发送URL而不是序列化图像。这也将允许客户端在可能的情况下在本地缓存图像。

答案 6 :(得分:-2)

为什么不将它转换为Base64String?

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

另一方面,您可以通过以下方式将其更改为字节[]:

byte[] arr = Convert.FromBase64String(string);