2016-07-09 2 views
3

Недавно я обновил приложение ASP.NET MVC от ASP.NET до ядра ASP.NET.Графики на стороне сервера в ASP.NET Core

В моем действии контроллера, у меня был кусок кода, который полагался на System.Drawing создать фотографию

using (FileStream stream = new FileStream(HttpContext.Server.MapPath($"~/Content/UserFiles/{AuthenticatedUser.Id.ToString()}.jpg"), FileMode.OpenOrCreate)) 
{ 
    Image image = Image.FromStream(model.DisplayPicture.InputStream); 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
} 

Данные изображения размещены на сервере как Base64 кодированное изображение

data:image/png;base64,.... 

Поскольку в .NET Core нет System.Drawing, есть ли другие библиотеки, которые могут это сделать?

+0

Здравствуйте, я нашел довольно похожий вопрос http://stackoverflow.com/questions/33344200/manipulating-images-with-net -core-5, что я делаю прямо сейчас, отказываясь от совместимости платформ и удаляя платформу .NET Core, в будущем мы увидим, какие пакеты они будут добавлять ... –

ответ

1

Как отметил Станислав, нынешнее решение - использовать ASP.NET Core на полной платформе .NET. System.Drawing полагается на вызовы GDI +, поэтому он связан с Windows.

Версия vNext Image Resizer от Imazen решит эту проблему на основе нового проекта imageflow. System.Drawing не следует использовать в таких серверных средах, как ASP.NET (указано на https://msdn.microsoft.com/en-us/library/system.drawing(v=vs.110).aspx). Некоторые сведения по этой теме приведены на странице https://github.com/imazen/Graphics-vNext.

Предлагаю использовать текущую версию 4.0.5 ImagerResizing и обновление через несколько месяцев (первая стабильная версия vNext объявлена ​​на следующий год).

+0

Да, я увидел несколько статей, указывающих на это. На данный момент я решил, и для простоты просто сохранить данные кодированного изображения Base64 в файл, а затем загрузить обратно через модель. – series0ne

1

Вам не нужно System.Drawing, если все, что вы пытаетесь сделать, это преобразовать base64 в файлы изображений. Я делаю это в моем проекте cloudscribe.SimpleContent. Пользователи добавляют изображения и контент в редакторе wysiwyg, и когда он отправляет обратно на сервер, я конвертирую их в файлы и разрешаю URL-адреса для файлов для обновления содержимого, чтобы он привязывался к новому файлу.

Вы можете увидеть мой рабочий код здесь: https://github.com/joeaudette/cloudscribe.SimpleContent/blob/master/src/cloudscribe.SimpleContent.Web/Services/FileSystemMediaProcessor.cs

Что нам нужно System.Drawing или какой-либо другой инструмент для изменения размеров и в оптимизации изображений. Существует ImageSharp project here, который работает над этим, хотя я не уверен, сколько функций в настоящее время готово

+0

Довольно много сейчас. Изменение размера, обрезка, поворот и многое другое. Кстати, метод Image.ToString() создает кодированное в Base64 изображение. –

Смежные вопросы