views:

97

answers:

4

I have found that an image can be stored as some string .To give an example I have included a ms word part that has an image.I saved a word file with image and saved it as xml format .when i opened the xml file in a notepad i got following section .It must be the image being stored as some stream of text. Is there a similar way to do it in .net.

<pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png" pkg:compression="store">
    <pkg:binaryData>
      iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAMAAAC1HibFAAADAFBMVEWlweL95Mn90qXs8vn7woTi
      6/b7unT94sO8oIP93br4okTJjExJgsS9mXT5rVr7xYr4mzaStdz+/v/5qlT3kiT7vnuCqdb7zZv8
      1aqXqb5GgMP4nTt6mLpMhMX//Pn/+vT/s1n/4rU+fMH+8eXT4fH1+PyTqsb++PGXl5n3lSpQh8b9
      6tVLg8T3iRP6sWO80el5o9OpxOP+7t3+9uz+2rLC1ez+7Nmbut6yyub+9On5pUqQt+P3jh2SmqNE
      ...Truncated for easy reading...
      ex9vtLWG320M9N9gHow3tv8BO9hrVo7LVzgAAAAASUVORK5CYII=
    </pkg:binaryData>
</pkg:part>

I have tried following way

 Bitmap bmp = new Bitmap(@"D:/bmp.bmp");
    MemoryStream mem = new MemoryStream();
    byte[] b = mem.ToArray();

But it give me a byte array instead of characters.If it was characters ,I could use it in many ways such as saving in xml format , using sql insert to insert image in a varchar insead of a blob. etc.

+7  A: 

Base64 encode your byte array

Convert.ToBase64String(b);
row1
+1  A: 

This is probably image saved in base64 String.

Here is a description of conversion:

http://www.dailycoding.com/Posts/convert_image_to_base64_string_and_base64_string_to_image.aspx

Andrzej Nosal
A: 

Binary data must be encoded to be stored as character data, using BASE64 encoding, for example. There are encoders in the framework to do that with the byte array you have there.

However, note that this encoding increases the size of the data slightly, and involves an extra step. If you can store the data as bytes directly, that's more efficient. but of course you'll need the encoding for XML.

Andrew Barber
[“slightly”?](http://meta.stackoverflow.com/questions/700/)
Timwi
+1  A: 

The encoding you are seeing is called base-64. You can use the following code to turn any file into base-64, irrespective of whether it’s an image or not:

byte[] fileContents = File.ReadAllBytes(@"D:/bmp.bmp");
var base64 = Convert.ToBase64String(fileContents);

This will generate a long, single-line string. You can additionally specify Base64FormattingOptions.InsertLineBreaks if you want it to be broken into several lines, like in the XML file you saw.

Timwi