如何使用Magick.net将HttpPostedFile.hic转换为.jpg



我有一个.NET c#web应用程序,允许用户上传图像。我安装了Magick.NET NuGet包。我正在尝试将上传的.hic文件转换为.jpg,但我不确定从哪里开始。

这是没有Magick.net的上传。

string fullPath = path + @"Images" + fileName;
Image image = Image.FromStream(postedFile.InputStream);
image.Save(path);

这是我正在尝试的,但我得到了以下错误:参数无效

string fullPath = path + @"Images" + fileName;
Bitmap bitmap = new Bitmap(postedFile.InputStream); <-- ERROR
using (MagickImage i = new MagickImage(bitmap))
{
i.Format = MagickFormat.Jpg;
using (MemoryStream memStream = new MemoryStream(i.ToByteArray()))
{
image = Image.FromStream(memStream);
}
}
image.Save(path);

这是另一种类似于Magick.net文档的方法,但我得到了以下错误:安全透明方法尝试访问安全关键方法失败。用AllowPartiallyTrustedCallersAttribute标记的程序集,并使用级别2的安全透明模型。级别2的透明度会导致AllowPartiallyTrustedCallers程序集中的所有方法在默认情况下变为安全透明,这可能是导致此异常的原因

string fullPath = path + @"Images" + fileName;
Stream fs = postedFile.InputStream;
BinaryReader br = new System.IO.BinaryReader(fs);
byte[] bytes = br.ReadBytes((Int32)fs.Length);
using (MemoryStream memStream = new MemoryStream())
{
using (MagickImage i = new MagickImage(bytes)) <-- ERROR
{
i.Format = MagickFormat.Jpg;
image = Image.FromStream(memStream);
}
}
image.Save(path);

有人有什么建议吗?

您不需要为此实例化位图,而该错误可能是因为您的流位置(需要将其设置为0(。

以下是我为实现所做的工作

postedFile.InputStream.Position = 0; //just to avoid the Parameter is not valid error in case you did any previous manipulation with this

using (MagickImage i = new MagickImage(postedFile.InputStream))
{
i.Format = MagickFormat.Jpg;
using (MemoryStream memStream = new MemoryStream(i.ToByteArray()))
{
image = Image.FromStream(memStream);
}
}

最新更新