Как получить ширину и высоту изображения при загрузке в ядре asp.net - PullRequest
0 голосов
/ 16 мая 2018

Я создаю страницу в ядре asp.net , то есть загружаю изображения на сервер, используя файл ввода типа html control.

<form method="post" asp-action="Add" enctype="multipart/form-data">
    <input type="file" name="mediaUpload" />
    <button type="submit">Submit</button>
</form>

Я также добавил System.Drawing для .NET Core dll из NuGet .

Теперь на своем посте я хочу получить изображение Width & Height.Это приведенный ниже код для него (но он теперь работает).

[HttpPost]
public ActionResult Add(IFormFile mediaUpload)
{
    Image image = Image.FromStream(file.OpenReadStream); // error is here
    int width = image.Width;
    int height = image.Height;
}  

Ошибка времени компиляции -

Код серьезности Описание Подавление строки файла проектаОшибка состояния CS1503 Аргумент 1: невозможно преобразовать из «группы методов» в «Поток» Goldentaurus E: \ Website \ Goldentaurus \ Goldentaurus \ Controllers \ MediaController.cs 453 Активно

Пожалуйста, помогите ??

Примечание. В моем предыдущем приложении 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;
}

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете попробовать эту ссылку https://andrewlock.net/using-imagesharp-to-resize-images-in-asp-net-core-a-comparison-with-corecompat-system-drawing/, в которой объясняется, как использовать CoreCompat.System.Drawing, который вы должны использовать для ядра .net. Он также сравнивает его с ImageSharp. Я использовал ImageSharp, потому что мне не нужно указывать операционную систему, как это требуется в CoreCompat.System.Drawing, вот как я заставил его работать, используя пакет nuget SixLabors.ImageSharp 1.0.0-beta0005 (убедитесь, что в поле «Включить предварительный выпуск включено»). в самородке проверено)

 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/ Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...