2010-09-17 2 views
3

Я обнаружил, что изображение может быть сохранено как некоторая строка. Чтобы привести пример, я включил часть слова ms, в которой есть изображение. Я сохранил файл слов с изображением и сохранил его как XML-формат. Когда я открыл файл xml в блокноте, я получил следующий раздел. Это должно быть изображение, которое хранится как некоторый поток текста. Есть ли аналогичный способ сделать это в .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> 

Я попытался следующим образом

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

Но это дает мне массив байт вместо characters.If это персонажи, я мог бы использовать его во многих отношениях, таких как сохранение в формате XML, используя sql insert для вставки изображения в varchar insead blob. и т.д.

ответ

0

Двоичные данные должны быть закодированы, чтобы быть сохранены в виде символьных данных, используя кодирование BASE64, например. В каркасе есть кодировщики, чтобы сделать это с помощью массива байтов, который у вас есть.

Однако обратите внимание, что это кодирование немного увеличивает размер данных и включает дополнительный шаг. Если вы можете хранить данные как байты напрямую, это более эффективно. но, конечно, вам понадобится кодировка для XML.

+0

["слегка"?] (Http://meta.stackexchange.com/questions/700/) – Timwi

2

Кодировка, которую вы видите, называется базой-64. Вы можете использовать следующий код, чтобы превратить любой файл в базу-64, независимо от того, является ли это изображение или нет:

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

Это создаст длинную строку из одной строки. Вы можете дополнительно указать Base64FormattingOptions.InsertLineBreaks, если хотите, чтобы он был разбит на несколько строк, например, в файле XML, который вы видели.

Смежные вопросы