-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Proposal for Cross-plat Server-side Image Manipulation Library #14706
Description
Proposal for Cross-plat Server-side Image Manipulation Library
The .NET Team and many developers in the community would like a graphics API for .NET Core and so we are starting to work on this. Of course, "graphics API" is a very broad term. To narrow down the scope we are looking at these main needs:
- Many developers want to target .NET Core, but rely on Framework APIs like System.Drawing. 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.
To address these needs, we plan to start experimenting with a cross-plat server-side image manipulation library.
Goals:
- Fill the gap of image manipulation in .NET Core
- Focus on server and cloud scenarios
- Support Linux, Mac and Windows
- Support image resizing and basic drawing operations
- Provide a performant solution
- Provide a well-designed API that can also support client scenarios in the future
In the next few weeks we will have some .NET summer interns start prototyping parts of this library so we are excited to get started!
Options for Cross-plat 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
- .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
Option 1 is currently our preferred option. There are many libraries for cross-plat server-side image manipulation that we have been investigating. OpenGL based libraries and libGD both looked promising. For this project we are starting to think libGD is the best place to start.
We have already had some great feedback from the community on primitive drawing types which we expect to use for this library. Now, we are ready for feedback on the image manipulation library. The first scenarios we are looking into are thumbnailing and watermarking. Please provide feedback on the goals, options for implementation, native image manipulation libraries we could use, and scenarios that we should address.