Растровые данные JSON - PullRequest
2 голосов
/ 21 мая 2010

Возможно или целесообразно кодировать растровые данные в JSON для возврата в веб-сервис?

Обновление: да, это сработало лучше, чем я думал. Я сделал составной объект .NET для комбинации изображений с данными изображения

Публичный класс AllThumbnails Публичный imgAllThumbs As String Открытые позиции () As Drawing.Rectangle Конечный класс

и получил к нему доступ через jQuery AJAX следующим образом:

$.ajax({
    type: "POST",
    url: "WebService.asmx/makeAllThumbnailsImage",
    data: "{DocumentNumber : \"" + DocumentNumber + "\"} ",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        var adl = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

        var data = Base64.decode(adl.imgAllThumbs);
        $('#output').append("<p><strong>" + data.length + "</strong></p>");
        $('#output').append("<p><strong><i>" + adl.positions.length + "<i></strong></p>");

    },
    failure: function (msg) {
        $('#output').text(msg);
    }
});

Мне пришлось увеличить значение в моем файле web.config, поскольку данные моего изображения превышали стандартный буфер jsonSerialization:

  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="262144">
        </jsonSerialization>
      </webServices>
    </scripting>
  </system.web.extensions>

Спасибо, ребята, за вашу помощь.

Ответы [ 3 ]

8 голосов
/ 21 мая 2010

Растровое изображение - это двоичные данные. JSON должен быть представлен как символьные данные. Таким образом, вам необходимо преобразовать двоичные данные в символьные данные и наоборот без потери информации. Обычно используется для этого кодировка Base64 . Непонятно, на какой язык программирования вы ориентируетесь, поэтому я не могу дать более подробный ответ, но почти все уважаемые языки имеют встроенный кодировщик Base64 или стороннюю библиотеку, которая может это сделать. Например, PHP имеет base64_encode() и base64_decode(). Java имеет кодек Apache Commons Base64 . Для JavaScript есть этот пример . И так далее.

2 голосов
/ 21 мая 2010

Похоже на Двоичный JSON .

Двоичный JSON, это двоичная кодированная сериализация JSON-подобных документов.Как и JSON, BSON поддерживает встраивание документов и массивов в другие документы и массивы.BSON также содержит расширения, которые позволяют представлять типы данных, которые не являются частью спецификации JSON.Например, BSON имеет тип Date и тип BinData.

BSON можно сравнить с двоичными форматами обмена, такими как буферы протокола.BSON более «без схемы», чем протокольные буферы, что может дать ему преимущество в гибкости, а также в небольшом недостатке в эффективности использования пространства (BSON имеет издержки для имен полей в сериализованных данных).

1 голос
/ 21 мая 2010

Возможно, вы сможете использовать данные URI (http://en.wikipedia.org/wiki/Data_URI_scheme) для декодирования закодированных растровых данных ... было бы интересно попробовать: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...