1

我正在序列JPEGc#.net. 我只是将其转换为字节流并通过 Web 服务发送。

我观察到序列化的字节流是实际图像大小的 30 倍。有人可以建议我一种更好的方法来序列化并保持相对于实际图像的大小吗?

4

7 回答 7

2

JPEG是一种压缩技术,读入后预计会大大扩展。这就是文件格式的本质。尝试找到一种方法来发送原始 JPEG 文件,而无需先将其作为图像读取。

于 2008-09-16T05:47:24.523 回答
2
  1. 您需要使用 FileStream 读取原始图像流,然后使用 MemoryStream 将其传递给 Serializer。
  2. 如果您只能使用 Image 类,请尝试指定您接收的字节数组的输出格式。
于 2008-09-16T05:53:05.400 回答
1

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

MSDN:

大数据和流媒体

于 2008-09-16T06:03:32.317 回答
0

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

于 2008-09-16T05:44:49.287 回答
0

如果你通过 webservices 发送的图像尺寸可能很大,也许你可以看看 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)

于 2008-09-16T06:03:02.723 回答
0

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

于 2008-09-16T06:17:06.777 回答
-2

为什么不将其转换为 Base64String?

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

在另一端,您可以通过以下方式将其更改回 byte[]:

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