如何将图像转换为字符流

时间:2010-09-17 06:17:02

标签: c# .net vb.net image

我发现一个图像可以存储为一些字符串。举个例子我已经包含了一个带有图像的ms字部分。我用图像保存了一个word文件并将其保存为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();

但是它给了我一个字节数组而不是字符。如果它是字符,我可以在很多方面使用它,比如保存xml格式,使用sql insert在一个blob的varchar insead中插入图像。等

4 个答案:

答案 0 :(得分:9)

Base64 encode your byte array

Convert.ToBase64String(b);

答案 1 :(得分:2)

您看到的编码称为base-64。您可以使用以下代码将任何文件转换为base-64,无论它是否为图像:

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

这将生成一个长的单行字符串。如果您希望将它分成几行,您可以另外指定Base64FormattingOptions.InsertLineBreaks,就像在您看到的XML文件中一样。

答案 2 :(得分:1)

这可能是保存在base64字符串中的图像。

以下是转化说明:

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

答案 3 :(得分:0)

例如,必须使用BASE64编码将二进制数据编码为存储为字符数据。框架中有编码器可以使用你在那里的字节数组。

但请注意,此编码会略微增加数据的大小,并涉及额外的步骤。如果您可以直接将数据存储为字节,那就更有效了。但是你当然需要XML编码。