0

I need to send a image/media through json, for that conversion needs to be done into text format. How can I achieve that through jQuery/ Javascript?

Neela
  • 1,328
  • 4
  • 23
  • 45

2 Answers2

1

You can find your answer in this post get image data in javascript

function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to guess the
    // original format, but be aware the using "image/jpg" will re-encode the image.
    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

You need to pass the img tag to this function. For further details see Convert an image into binary data in javascript

GROVER.
  • 4,071
  • 2
  • 19
  • 66
Rinku
  • 1,078
  • 6
  • 11
0

A few times already I read that jQuery doesn't provide functionality to download binary data and have it pass on to JavaScript as a string. Then I ran into this question. That got me thinking and I wrote a wrapper around $.ajax() looking like this (yes, it's simplified to show the main bits):

ajaxWrapper = function(url, dataType, callback, headers) {
    return $.ajax({
        url: url,
        dataType: dataType == "binary" ? "text" : dataType,
        mimeType: dataType == "binary" ? "text/plain; charset=x-user-defined" : undefined,
        headers: headers || {}
    }).done(function(data, status, jqXHR) {
        callback(data, status, jqXHR);
    });
}

And then in case you are dealing with Unicode the callback contains this line:

data = btoa(unescape(encodeURIComponent(data)));

or otherwise simply

data = btoa(data);

In other words if you read through the documentation of $.ajax() you simply add a dataType "binary".

Note that I use jQuery 1.7.1, but I don't see why it shouldn't work in later versions, too.

Community
  • 1
  • 1
sjngm
  • 12,423
  • 14
  • 84
  • 114
  • `decodeURIComponent(encodeURIComponent(…))` obviously is senseless. – Bergi Feb 19 '13 at 16:04
  • @Bergi Well, actually not. If you google for base64-encoding and browser issues you will run into answers suggesting to use this. – sjngm Feb 19 '13 at 16:48
  • Can you point me to it? However I haven't seen a browser where decoding is not the inverse function of encoding, even if programmed non-standard. – Bergi Feb 19 '13 at 16:52
  • @Bergi First, I forgot to say that it's related to Unicode-strings. Second, this is weird. If I google for it I get https://developer.mozilla.org/en-US/docs/DOM/window.btoa as the third hit. However, the content of the page doesn't have that line in there any more. I will change my answer to use `unescape()`. Thanks for the hint. – sjngm Feb 19 '13 at 17:25