【发布时间】:2019-09-10 14:13:12
【问题描述】:
我正在尝试使用 .Net Core 2.2 将图像读取为 Base64 格式,但它会抛出
ArgumentException:图像格式未知。 System.Drawing.Image.FromFile(string filename, bool useEmbeddedColorManagement)
filePath 是正确的,我已经两次和三次检查文件是否存在。
我尝试使用大小写扩展名来命名我的 PNG。
这不会在 Windows 本地发生,但是一旦应用程序部署到 linux 就会发生。有问题的代码如下。
public static string ImageToBase64(string filePath)
{
System.Diagnostics.Debug.WriteLine($"File Path for Image: {filePath}");
string base64String;
using (var image = Image.FromFile(Path.GetFullPath(filePath)))
{
using (var ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
image.Dispose();
byte[] imageBytes = ms.ToArray();
base64String = Convert.ToBase64String(imageBytes);
imageBytes = null;
ms.Dispose();
}
}
GC.Collect();
return base64String;
}
编辑
我也尝试使用带位图的文件流。
public static string ImageToBase64(string filePath)
{
string base64String;
using(var fs = new FileStream(filePath,FileMode.Open))
using (var image = new Bitmap(fs))
{
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Png);
image.Dispose();
byte[] imageBytes = ms.ToArray();
base64String = Convert.ToBase64String(imageBytes);
imageBytes = null;
ms.Dispose();
}
}
GC.Collect();
return base64String;
}
这会引发以下异常:
抛出异常:'System.ArgumentException' in System.Drawing.Common.dll:'图像格式未知。'堆栈跟踪:
在 System.Drawing.Image.InitializeFromStream(Stream 流) 在 System.Drawing.Bitmap..ctor(Stream 流)
【问题讨论】:
-
您是否尝试过将代码简化为仅将 png 文件加载到图像中?这甚至可以在 linux 上运行吗?
-
你确定你已经安装了
System.Drawing.Commonnuget 包吗? -
我已经尝试过,但即使这样也无法在 Linux 上运行。它在 Image.FromFile 失败我确实安装了 System.Drawing.Common v 4.5.1
-
您可以尝试在图像上打开 FileStream,并使用接收流的 Bitmap 的构造函数吗?
-
我很快就和我谈过了,这也不起作用。将更新问题
标签: c# .net-core syncfusion