获取 RTF 图像 Html base64 字符串作为 System.Drawing.Image
Get RTF Image Html base64 string as System.Drawing.Image
我在我们的数据库中存储了一个富文本 html 字符串,示例如下(我已经缩短了位信息):
data:image/png;base64,iVBORw0...ORK5CYII
data:image/jpeg;base64,/9j/4AAQS...TcUQrQf/Z
我基本上需要使用这个 HTML 并在 C# 中创建一个 System.Drawing.Image
,然后将图像保存到 Images 文件夹中的某个位置。对于上面的第一个 png 示例,这一切似乎都适用于以下代码:
string imageBase64String = "iVBORw0...ORK5CYII";
byte[] bytes = Convert.FromBase64String(imageBase64String);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
string fileNameFull = Guid.NewGuid().ToString() + "." + imageFormat;
string relativePath = @"~\Images\pdfExports\" + fileNameFull;
string fileLocation = HttpContext.Current.Server.MapPath(relativePath);
image.Save(fileLocation);
然而,当我尝试包括 jpg/jpeg 在内的其他格式时,图像似乎没有正确创建并且不能 read/opened。
是否有更好、更通用的方法从这个 Html 字符串中获取 C# System.Drawing.Image
?还是我只是遗漏了一些关于如何传递 base64 字符串的简单信息?
编辑
我发布这篇文章很晚,错过了一些关于我正在剥离元数据的代码示例的重要信息。我现在已经更新了。到填充字符串 imageBase64String 时,我已经删除了元数据。
您正在破坏图像数据,data:image/png;base64,
是元信息,不是真实的图像内容,您必须在将数据转换为二进制之前删除该信息:
string imageBase64String = "data:image/png;base64,iVBORw0...ORK5CYII";
int index = imageBase64String.IndexOf(",");
imageBase64String = imageBase64String .Substring(index + 1);
byte[] bytes = Convert.FromBase64String(imageBase64String);
通过简单的更改,我已经设法使它正常工作。我没有尝试从 byte-array 创建 System.Drawing.Image 对象并保存它,而是发现使用:
File.WriteAllBytes(fileLocation, bytes);
做的工作只是传递原始字节和文件位置。现在我似乎能够保存和打开我需要的任何图像格式。
我在我们的数据库中存储了一个富文本 html 字符串,示例如下(我已经缩短了位信息):
data:image/png;base64,iVBORw0...ORK5CYII
data:image/jpeg;base64,/9j/4AAQS...TcUQrQf/Z
我基本上需要使用这个 HTML 并在 C# 中创建一个 System.Drawing.Image
,然后将图像保存到 Images 文件夹中的某个位置。对于上面的第一个 png 示例,这一切似乎都适用于以下代码:
string imageBase64String = "iVBORw0...ORK5CYII";
byte[] bytes = Convert.FromBase64String(imageBase64String);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
string fileNameFull = Guid.NewGuid().ToString() + "." + imageFormat;
string relativePath = @"~\Images\pdfExports\" + fileNameFull;
string fileLocation = HttpContext.Current.Server.MapPath(relativePath);
image.Save(fileLocation);
然而,当我尝试包括 jpg/jpeg 在内的其他格式时,图像似乎没有正确创建并且不能 read/opened。
是否有更好、更通用的方法从这个 Html 字符串中获取 C# System.Drawing.Image
?还是我只是遗漏了一些关于如何传递 base64 字符串的简单信息?
编辑 我发布这篇文章很晚,错过了一些关于我正在剥离元数据的代码示例的重要信息。我现在已经更新了。到填充字符串 imageBase64String 时,我已经删除了元数据。
您正在破坏图像数据,data:image/png;base64,
是元信息,不是真实的图像内容,您必须在将数据转换为二进制之前删除该信息:
string imageBase64String = "data:image/png;base64,iVBORw0...ORK5CYII";
int index = imageBase64String.IndexOf(",");
imageBase64String = imageBase64String .Substring(index + 1);
byte[] bytes = Convert.FromBase64String(imageBase64String);
通过简单的更改,我已经设法使它正常工作。我没有尝试从 byte-array 创建 System.Drawing.Image 对象并保存它,而是发现使用:
File.WriteAllBytes(fileLocation, bytes);
做的工作只是传递原始字节和文件位置。现在我似乎能够保存和打开我需要的任何图像格式。