尝试在 ASP 中将 jpeg 转换为 png Net Core 抛出 GDI+ 异常
Trying to convert jpeg to png in ASP Net Core throws GDI+ exception
我在 ASP Net Core (5) 应用程序中使用 System.Drawing.Common 5.0.1 nuget 包,并希望将图像(可以是 jpeg、png 等)转换为 png (如果还没有 png)。
当图片上传成功后,我尝试用下面的代码转换它(图片字节在uploadResult.FileData
中可用):
byte[] imageBytes;
if (fileExtension.ToLower() != "png")
{
using (var ms = new MemoryStream(uploadResult.FileData))
{
using(Image image = Image.FromStream(ms))
{
image.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
}
}
}
它总是在这一行失败:
image.Save(ms, ImageFormat.Png);
异常:
An exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.Common.dll but was not handled in user code: 'A generic error occurred in GDI+.'
我知道本网站上有很多关于此错误消息的帖子,它们包含很好的答案,但我相信我已经关注了它们。此外,大多数问题都使用文件系统中的图像或写入它,但我的图像已经可以作为字节数组使用,我写入内存流 - 但我看不出是什么原因造成的。
好的,成功了,感谢 John 的评论,方法如下:
using (var ms = new MemoryStream(uploadResult.FileData))
{
using (var targetMs = new MemoryStream())
{
using(Image image = Image.FromStream(ms))
{
image.Save(targetMs, ImageFormat.Png);
imageBytes = targetMs.ToArray();
}
}
}
不确定这是不是最好的方法,或者至少是一个好的方法。如果有人想出更好的东西(特别是关于 performance/memory 用法)我想看看它。
我在 ASP Net Core (5) 应用程序中使用 System.Drawing.Common 5.0.1 nuget 包,并希望将图像(可以是 jpeg、png 等)转换为 png (如果还没有 png)。
当图片上传成功后,我尝试用下面的代码转换它(图片字节在uploadResult.FileData
中可用):
byte[] imageBytes;
if (fileExtension.ToLower() != "png")
{
using (var ms = new MemoryStream(uploadResult.FileData))
{
using(Image image = Image.FromStream(ms))
{
image.Save(ms, ImageFormat.Png);
imageBytes = ms.ToArray();
}
}
}
它总是在这一行失败:
image.Save(ms, ImageFormat.Png);
异常:
An exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.Common.dll but was not handled in user code: 'A generic error occurred in GDI+.'
我知道本网站上有很多关于此错误消息的帖子,它们包含很好的答案,但我相信我已经关注了它们。此外,大多数问题都使用文件系统中的图像或写入它,但我的图像已经可以作为字节数组使用,我写入内存流 - 但我看不出是什么原因造成的。
好的,成功了,感谢 John 的评论,方法如下:
using (var ms = new MemoryStream(uploadResult.FileData))
{
using (var targetMs = new MemoryStream())
{
using(Image image = Image.FromStream(ms))
{
image.Save(targetMs, ImageFormat.Png);
imageBytes = targetMs.ToArray();
}
}
}
不确定这是不是最好的方法,或者至少是一个好的方法。如果有人想出更好的东西(特别是关于 performance/memory 用法)我想看看它。