在aspnetVnext核心CLR中缺少System.Drawing命名空间。

5

在CoreCLR中,System.drawing命名空间不可用。我想要在服务器上调整图片大小并将其存储后返回。

为了更好地理解,我的应用程序使用Markdown进行内容编辑。一旦图片上传完成,我想要将其调整大小并应用到HTML中。我正在编写一个与桌面不兼容的组件来使用CoreCLR。


它在 asp.net 中的使用从未得到官方支持。然而,我认为推荐的替代方案(Windows Imaging Components)也不适用于 Core CLR。 - Damien_The_Unbeliever
你可以添加对核心的引用并使用它。你可以在以下路径中找到它:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework - Mihai Bratulescu
我正在开发一个.NET Core图像处理库,可能适用于https://github.com/JimBobSquarePants/ImageProcessor。我已经取得了很大的进展。 - James South
4个回答

11

简短回答(现在也是唯一的答案)是“是的,你完全正确”。System.Drawing不是也永远不会成为Core的好选择,特别是因为它是跨平台的。我们正在寻找其他解决方案,比如一个托管的libgd包装器,就像在这里讨论的那样 https://github.com/imazen/Graphics-vNext


这看起来真的很有趣,肯定需要类似的东西。根据他们今天发布的更新,似乎Imazen决定不对libgd.net进行移植。 - Nathan Smith
现在进展如何?据我所知,System.Drawing已经被添加到下一个.NET Core或ASP.NET Core的版本中了,这是正确的吗? - szhuravel
@szhuravel 不,只是一些原始类型,例如Point、Rectangle等,以帮助进行交互操作。 - James South

1

1
Alexander Köplinger开始将Mono的System.Drawing(和WinForms)实现移植到.NET Core。您可以在github.com/akoeplinger/mono-winforms-netcore找到他的代码。
然而,他确实对此发表了以下警告:
“近年来,Mono的WinForms实现并没有得到太多关注,因此不确定它是否在实验性/业余应用程序之外有什么用处。”

0
一个很好且简单的图片转换和处理方法是使用Magick.NET(以下为示例代码):
using( MagickImage ThisPicture = new MagickImage( JpegPicture ) )
{
    ThisPicture.Scale( XDimensions, YDimensions );
    ThisPicture.ColorType = ColorType.Grayscale;
    ThisPicture.Extent( XDimensions, YDimensions, Gravity.Center, MagickColors.Black );

    using( PixelCollection ThisPixels = ThisPicture.GetPixels() )
    {
        byte Intensity = ThisPixels[ IX, IY ].GetChannel( 0 );
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接