Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取RTF图像Html base64字符串作为System.Drawing.Image_C#_System.drawing.imaging - Fatal编程技术网

C# 获取RTF图像Html base64字符串作为System.Drawing.Image

C# 获取RTF图像Html base64字符串作为System.Drawing.Image,c#,system.drawing.imaging,C#,System.drawing.imaging,我正在数据库中存储一个富文本html字符串,示例如下(我缩短了位信息): 我基本上需要使用这个HTML,在C#中创建一个System.Drawing.Image,然后将图像保存到Images文件夹中的某个位置。在上面的第一个png示例中,这一切似乎与以下代码配合得很好: string imageBase64String = "iVBORw0...ORK5CYII"; byte[] bytes = Convert.FromBase64String(imageBas

我正在数据库中存储一个富文本html字符串,示例如下(我缩短了位信息):

我基本上需要使用这个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)时,似乎图像创建不正确,无法读取/打开

有没有更好、更通用的方法从这个Html字符串获取C 35;
System.Drawing.Image
?或者我只是缺少了一些关于如何传递base64字符串的简单信息

编辑
我很晚才发布这篇文章,并且遗漏了一些关于我正在剥离元数据的代码示例的重要信息。我现在已经更新了。当字符串imageBase64String填充时,我已经去掉了meta。

您正在破坏图像的数据,
数据: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);

我已经设法通过一个简单的改变使它工作良好。我没有尝试从字节数组创建System.Drawing.Image对象并保存它,而是发现使用:

File.WriteAllBytes(fileLocation, bytes);

该作业只传递原始字节和文件位置。现在,我似乎可以保存和打开任何需要的图像格式。

Hi Gusman,感谢您的回复。我已经对上面的代码进行了编辑,因为我错误地显示了传递的错误字符串。事实上,我已经从字符串中去掉了元数据——不管我的示例前面说了什么。很抱歉正如我提到的,这似乎适用于PNG文件,但不适用于jpeg/jpg。
File.WriteAllBytes(fileLocation, bytes);