2016-07-09 51 views
3

我最近將ASP.NET MVC應用程序從ASP.NET升級到ASP.NET Core。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

正如Stanislav指出的,目前的解決方案是在完整的.NET框架上使用ASP.NET Core。 System.Drawing依賴於GDI +調用,因此綁定到Windows。

Imazen的vNext Version Resizer將基於新的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

如果您正在嘗試將base64轉換爲圖像文件,則不需要System.Drawing。我在我的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編碼表示。 –