We usually spend Friday mornings telling you about a new or unique open-source project gaining steam on GitHub, but this week we came across a fascinating proposal from Microsoft for a cross-platform server-side image manipulation library in .NET Core—and it’s all being prototyped by interns.
The proposal, posted by Microsoft intern Kendra Havens (along with 14 other participants), lays out plans for a graphics API for .NET Core, including the scope and goals for the project and options for cross-platform implementation.
“Many developers want to target .NET Core, but rely on Framework APIs like System.Drawing,” wrote Havens. “We’d like to make this easier. .NET doesn’t have any appropriate image manipulation APIs for server-side apps. We want to improve server-side image processing. We’d like to enable .NET developers to reach multiple platforms with apps that manipulate images.”
The .NET team’s goals for the graphics API project include filling the image manipulation tooling gap in .NET Core, while focusing on server and cloud scenarios and building client scenarios into the API’s design. The proposal plans support for performant image resizing and basic drawing operations, as well as cross-platform support for Linux, Mac and Windows.
The proposal lays out three options for cross-platform implementation:
- .NET wrapper around a native cross-platform implementation: “Pre-existing libraries make providing a wrapper more feasible and have known behavior. We don’t need to own the implementation,” the proposal states.
- .NET wrapper around APIs provided by the operating systems: “Has many of the same benefits of the first option. Not all versions of all operating systems will likely have the functionality required. Likely to result in different behaviors across different operating systems.”
- Fully Managed Implementation: “Not practical, as it requires us to write something from scratch.”
A team of .NET interns will begin experimenting with a cross-platform server-side image manipulation library this summer, and they will start prototyping parts of the library and API. The team currently plans to pursue option one for the cross-platform implementation.