Announcing ImageSharp 1.0.0

Seinfield cast celebrating

It's time to celebrate!

We are very excited to announce the release of ImageSharp 1.0.0 final. You can download it today.

ImageSharp is a new, fully featured, fully managed, cross-platform, 2D graphics library. Designed to simplify image processing, ImageSharp brings you an incredibly powerful yet beautifully simple API.

ImageSharp is designed from the ground up to be flexible and extensible. The library provides API endpoints for common image processing operations and the building blocks to allow for the development of additional operations.

Built against .NET Standard 1.3, ImageSharp can be used in device, cloud, and embedded/IoT scenarios.

What's new since RC3

The biggest change that may affect early adopters of our new async API-s is the introduction of cancellation on those. Code utilizing overloads of Image.LoadAsync(), image.SaveAsync() has to be recompiled against the new package.

Read the release notes for detailed release information.

Getting Started

We've designed the ImageSharp API to be simple to use and extend with some awesome built-in functionality.

Loading and Saving Images

ImageSharp provides several options for loading and saving images to cover different scenarios. The library automatically detects the source image format upon load and it is possible to dictate which image format to save an image pixel data to.

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

// Open the file automatically detecting the file type to decode it.
// Our image is now in an uncompressed, file format agnostic, structure in-memory as
// a series of pixels.
using (Image image = Image.Load("foo.jpg")) 
{
    // Resize the image in place and return it for chaining.
    // 'x' signifies the current image processing context.
    image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); 

    // The library automatically picks an encoder based on the file extension then
    // encodes and write the data to disk.
    // You can optionally set the encoder to choose.
    image.Save("bar.jpg"); 
} // Dispose - releasing memory into a memory pool ready for the next image you wish to process.

Inititalizing New Images

Creating a new image is simple too.

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

int width = 640;
int height = 480;

// Creates a new image with empty pixel data. 
using(var image = new Image<Rgba32>(width, height)) 
{
  // Do your thing in here...

} // Dispose - releasing memory into a memory pool ready for the next image you wish to process.

There are more examples and full API docs to help you get started at https://docs.sixlabors.com; the documentation you see there is just a start. You can follow our progress at docs on GitHub.

The ImageSharp Journey

Around five years ago When .NET Core 1.0 was still in development there was a lot of negative feedback in the Microsoft .NET issue trackers regarding the lack of the System.Drawing namespace in the proposed framework.

ImageSharp was started as a result of listening to that feedback with the dream of collaboratively building a fully featured, fully managed, cross-platform, 2D graphics API for the next generation of .NET applications.

Today those namespaces have been added to the framework but with caviets. We still believe that ImageSharp is the smarter choice for the future, Microsoft agree...

The System.Drawing namespace is not recommended for new development, due to not being supported within a Windows or ASP.NET service and it is not cross-platform. ImageSharp and SkiaSharp are recommended as alternatives.

We’d like to express our gratitude for everyone that has tried ImageSharp and has given us feedback. We know that thousands of you have been using the pre-1.0 product. Thanks! We’ve received a lot of feedback about design choices, user experience, performance, communication and other topics. We’ve tried our best to apply all of that feedback. The release is much better for it. We couldn’t have done it without you!

If you haven't used ImageSharp before or haven’t used it in a while, now is a great moment to try it. You can enjoy the productivity and power of ImageSharp with no constraints, on any OS, with any tool and for any application. All of that fully open source, developed with the community.

The Future

Today ImageSharp and accompanying projects are released under the permissive Apache 2.0 license. They are managed by Six Labors - A company set up with the dream of ensuring the sustainable future of the projects. We're a member of the .NET Foundation and are working with them to improve the .NET Open Source ecosystem for both maintainers of projects and the companies that use them.

That future, however, can only be ensured with the help and support of the .NET community either by purchasing a Commercial Support License or by submitting code and documentation patches to the various Six Labors repositories.

Without your support ImageSharp and co will go the way of other pioneering .NET projects like NancyFX and fade away into history.

But of course you'll help out... Why?

Thor daying 'Because that's what heroes do'.

From a roadmap perspective we'll continue to bring usability and performance enhancements to ImageSharp but the immediate focus will shift to bringing SixLabors.ImageSharp.Drawing, SixLabors.ImageSharp.Web and SixLabors.Fonts development up to a production ready standard. Any and all assistance there would be greatly appreciated.

Closing

Thanks again for all the feedback and usage. It’s been a pleasure to build ImagSharp so far and to see so many people try it out; we really appreciate it. Please continue exploring the product and learning what it’s capable of.

comments powered by Disqus