【问题标题】:Returning a byte[] representing an image as JSON?返回一个表示图像为 JSON 的字节 []?
【发布时间】:2012-03-13 02:06:48
【问题描述】:

我正在创建一个对象服务器端,它拥有代表对象客户端所需的所有数据。我希望我的客户端对象拥有的属性之一是它的图标。

目前,我有以下代码。还没跑,只是想和S.O讨论一些事情:

public class ComponentDiagramPolygonChild
{
    IconServicesSoapClient IconServicesProxy = new IconServicesSoapClient("IconServicesSoap");

    public string Name { get; set; }
    public byte[] Icon { get; set; }

    public ComponentDiagramPolygonChild(PlanViewComponent planViewComponent)
    {
        Name = planViewComponent.Name;
        //TODO: Can icon ever return null here?
        Icon = IconServicesProxy.GetIconByID(planViewComponent.Icon).Image;
        planViewComponent.
    }
}

在我看来,我有两个选择:

  • 将 Icon 的 ID 存储为属性而不是 byte[]。
  • 将图标存储为字节[]。

如果我使用前一个建议,我将需要通过将图标的 ID 传递给服务器来访问服务器并请求图像数据。我相信这将是一种更简单的方法——我只会返回一个包含图像的内存流并将该流加载到所需的位置。这样做的不利方面是服务器上的多次点击,这似乎是完全没有必要的。

如果我使用后一个建议,我将通过网络传递(显着?)大量数据。我不确定字节数组是否能够正确地 JSON 化。我不确定如何获取 jsonized byte[] 并将其转换为图像数据。

有没有人遇到过这种情况?我应该如何解决这个问题?谢谢。

编辑:在做了一些阅读之后,看起来前一个选项是我最好的选择。

【问题讨论】:

    标签: javascript json image model-view-controller


    【解决方案1】:

    我认为从技术和编程的角度来看,将数据图像传回去会很酷。

    您可以使用图像的 base64 编码版本来做到这一点,大多数现代浏览器都会支持这一点。您也可以使用 HTML5 画布对象来实现。 Documentation is available on the MDN.

    但是,从实际的角度来看,最可维护的解决方案是使用 ID 并让它发出单独的 HTTP 请求。无需 HTML 5,几乎所有使用中的浏览器都支持,并且您可以重复使用现有的图像传输系统。

    如果您的服务器经过调整,则可以对图像进行额外的 HTTP 请求,并且如果您处理大量此类图像,服务器上的 CPU 负载将大大减少。

    【讨论】:

    • 我阅读了有关 canvas 对象的 HTML5 文档——这激起了我的兴趣。我已经将这些图像加载到画布中——减少服务器上的点击,同时利用画布听起来很理想。看起来它需要一个“CanvasPixelArray”对象作为数据。这种类型是否容易从字节数组转换为?
    • 抱歉,我对此知之甚少,无法提供帮助。您可能可以在 SO 上的一个新问题中获得一些具体的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多