1

我有一个允许用户上传图像的 .NET c# Web 应用程序。我安装了 Magick.NET NuGet 包。我正在尝试将上传的 .heic 文件转换为 .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);

有人有什么建议吗?

4

1 回答 1

0

您不需要为此实例化位图,并且该错误可能是由于您的流位置(您需要将其设置为 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);
    }
}
于 2020-09-30T20:56:10.487 回答