JSON bitmap data
Is it possible, or reasonable, to encode bitmap data into JSON to be returned in a webservice?
Update: Yes, this worked better than I thought. I made a .NET composite object for a combination of images together with image data
Public Class AllThumbnails Public imgAllThumbs As String Public positions() As Drawing.Rectangle End Class
and accessed it via jQuery AJAX thusly:
$.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').ap开发者_JS百科pend("<p><strong><i>" + adl.positions.length + "<i></strong></p>");
},
failure: function (msg) {
$('#output').text(msg);
}
});
I did have to increase a value in my web.config since my image data was overrunning the standard jsonSerialization buffer:
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="262144"> </jsonSerialization> </webServices> </scripting> </system.web.extensions>
Thanks guys for your help.
A bitmap is binary data. JSON is to be represented as character data. So you need to convert binary data to character data and vice versa without loss of information. A commonly used encoding for this is Base64. It's unclear which programming language you're targeting on, so I can't give a more detailed answer, but almost all self-respected languages have either a builtin Base64 encoder or a 3rd party library which can do that. PHP for example has base64_encode()
and base64_decode()
. Java has Apache Commons Codec Base64. For JavaScript there is this example. And so on.
Sounds like Binary JSON.
Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.
BSON can be compared to binary interchange formats, like Protocol Buffers. BSON is more "schema-less" than Protocol Buffers, which can give it an advantage in flexibility but also a slight disadvantage in space efficiency (BSON has overhead for field names within the serialized data).
You might be able to use a data uri (http://en.wikipedia.org/wiki/Data_URI_scheme) to decode encoded bitmap data... would be interesting to try :-)
精彩评论