我正在使用输入类型文件 html控件在上传图片 页面 页面。
<form method="post" asp-action="Add" enctype="multipart/form-data">
<input type="file" name="mediaUpload" />
<button type="submit">Submit</button>
</form>
我还从 System.Drawing for .NET Core 添加了 NuGet dll。
现在我的帖子动作我想得到图像宽度&amp;高度。这是它的下面的代码(但它现在正在工作)。
[HttpPost]
public ActionResult Add(IFormFile mediaUpload)
{
Image image = Image.FromStream(file.OpenReadStream); // error is here
int width = image.Width;
int height = image.Height;
}
complile time error -
严重级代码描述项目文件行抑制状态 错误CS1503参数1:无法从'方法组'转换为 'Stream'Goldentaurus E:\ Website \ Goldentaurus \ Goldentaurus \ Controllers \ MediaController.cs 453 Active
请帮帮忙?
注意:我以前的ASP.NET MVC 5应用程序(代码如下所示)使用的代码类似,运行得非常好。我将其修改为上面的代码,以便在asp.net核心上工作。
[HttpPost]
public ActionResult Add(HttpPostedFileBase mediaUpload)
{
Image image = Image.FromStream(file.InputStream);
int width = image.Width;
int height = image.Height;
}
答案 0 :(得分:0)
您可以尝试使用此链接https://andrewlock.net/using-imagesharp-to-resize-images-in-asp-net-core-a-comparison-with-corecompat-system-drawing/,它说明了如何使用CoreCompat.System.Drawing,这是您应该用于.net core的内容。它还将它与ImageSharp进行了比较。我使用ImageSharp是因为我不必指定CoreCompat.System.Drawing所需的操作系统,这是使用nuget包SixLabors.ImageSharp 1.0.0-beta0005使其运行的方式(确保Include prerelease是框在金块中被选中)
private async Task<(int height, int width)> GetImageDimentions(IFormFile file)
{
if (file != null)
{
List<string> AcceptableImageExtentions = new List<string> { ".jpg", ".jpeg", ".png", ".bmp" };
string fileExtention = System.IO.Path.GetExtension(file.FileName);
if (AcceptableImageExtentions.Contains(fileExtention))
{
using (System.IO.Stream stream = new System.IO.MemoryStream())
{
await file.CopyToAsync(stream);
SixLabors.ImageSharp.Formats.IImageDecoder imageDecoder;
if (fileExtention == ".jpeg" || fileExtention == ".jpg")
{
imageDecoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegDecoder();
}
else if (fileExtention == ".png")
{
imageDecoder = new SixLabors.ImageSharp.Formats.Png.PngDecoder();
}
else
{
imageDecoder = new SixLabors.ImageSharp.Formats.Bmp.BmpDecoder();
}
if (stream.Position == stream.Length) //Check this because if your image is a .png, it might just throw an error
{
stream.Position = stream.Seek(0, SeekOrigin.Begin);
}
SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32> imageSharp = imageDecoder.Decode<SixLabors.ImageSharp.PixelFormats.Rgba32>(Configuration.Default, stream);
if (imageSharp != null)
{
return (imageSharp.Height, imageSharp.Width);
}
}
}
}
return (0, 0);
}
您也可以阅读https://blogs.msdn.microsoft.com/dotnet/2017/01/19/net-core-image-processing/ 希望对您有帮助