我正在尝试使用 .Net Core 2.2 将图像读取为 Base64 格式,并且它抛出
ArgumentException:图像格式未知。
System.Drawing.Image.FromFile(字符串文件名, bool useEmbeddedColorManagement)
文件路径是正确的,我已经两次和三次检查该文件是否存在。
我尝试使用大写和小写扩展名来命名我的 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;
}
EDIT
我还尝试使用带有位图的文件流。
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”
System.Drawing.Common.dll:“图像格式未知。”堆栈跟踪:
在 System.Drawing.Image.Initialize FromStream(流流) 在 System.Drawing.Bitmap..ctor(流流)
虽然我仍然不确定为什么 Image.FromFile 和使用 Bitmap 不起作用,但我设法通过使用让它工作图像锐利 https://github.com/SixLabors/ImageSharp来自六工。
工作代码如下。
public static string ImageToBase64(string filePath)
{
string base64String;
using (var image = SixLabors.ImageSharp.Image.Load(filePath))
{
using (var ms = new MemoryStream())
{
image.Save(ms, new PngEncoder());
image.Dispose();
byte[] imageBytes = ms.ToArray();
base64String = Convert.ToBase64String(imageBytes);
imageBytes = null;
ms.Dispose();
}
}
GC.Collect();
return base64String;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)