我想将路径中找到的PNG图像转换为Windows64中的html页面的base64。如何才能完成?
Stream imgStream;
imgStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("NewUIChanges.Htmlfile.round1.png");
byte[] data = new byte[(int)imgStream.Length];
int offset = 0;
while (offset < data.Length)
{
int bytesRead = imgStream.Read(data, offset, data.Length - offset);
if (bytesRead <= 0)
{
throw new EndOfStreamException("Stream wasn't as long as it claimed");
}
offset += bytesRead;
}
答案 0 :(得分:0)
它是一个PNG图像的事实实际上是无关紧要的 - 你需要知道的是你有一些字节需要转换成base64。
将流中的数据读入字节数组,然后使用Convert.ToBase64String
。从流中读取字节数组可能会略显繁琐,具体取决于流是否通告其长度。如果是,您可以使用:
byte[] data = new byte[(int) stream.Length];
int offset = 0;
while (offset < data.Length)
{
int bytesRead = stream.Read(data, offset, data.Length - offset);
if (bytesRead <= 0)
{
throw new EndOfStreamException("Stream wasn't as long as it claimed");
}
offset += bytesRead;
}
如果没有,最简单的方法可能是将其复制到MemoryStream
:
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[8 * 1024];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
return ms.ToByteArray();
}
因此,一旦你使用这些代码(或其他任何合适的代码)来获取字节数组,只需使用Convert.ToBase64String
就可以了。
可能存在流式解决方案,它们将避免将整个字节数组存储在内存中 - 例如尽可能地构建StringBuilder
base64数据 - 但它们会更复杂。除非你打算处理非常大的文件,否则我会坚持使用上面的文件。