- Notifications
You must be signed in to change notification settings - Fork0
📷 A cross-platform library for processing of image files written in C#
programmation/ImageProcessor
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
ImageProcessor is the work of a very, very, small number of developers who struggle balancing time to contribute to the project with family time and work commitments. If the project is to survive we need more contribution from the community at large. There are several issues, most notably#264 that we cannot possibly solve on our own.
We, and we believe many others in the community at large want a first-class 2D imaging library with a simple API that is not simply a wrapper round an existing library. We want it to have a low contribution bar which we believe can only happen if the library is written in C#. We want it to be written to cover as many use cases as possible. We want to write the same code once and have it work on any platform supporting CoreFX.
With your help we can make all that a reality.
If you can donate any time to improve on the project, be it helping with documentation, tests or contributing code please do.
This is a complete rewrite from the ground up to allow the processing of images without the use ofSystem.Drawing using a cross-platform class library. It's still in early stages but progress has been pretty quick.

###Why am I writing this?
With NETCore there is currently no version ofSystem.Drawing to allow continued progress of the existing ImageProcessor library.
At present the code is pre-release but when ready it will be available onNuget.
Pre-release downloads
We already have aMyGet package repository - for bleeding-edge / development NuGet releases.
If you prefer, you can compile ImageProcessorCore yourself (please do and help!), you'll need:
- Visual Studio 2015 (or above)
- TheWindows 10 development tools - Click
Get Visual Studio Community. - Dnvm and Dnx installed
To install the last two please see the instructions at theDotNet documentation
To clone it locally click the "Clone in Windows" button above or run the following git commands.
git clone https://github.com/JimBobSquarePants/ImageProcessor
###What works so far/ What is planned?
- Encoding/decoding of image formats (plugable), progressive required
- jpeg (Includes Subsampling, Progressive required)
- bmp (More bmp format saving support required, 24bit just now)
- png (Need updating for saving indexed support)
- gif
- Quantizers (IQuantizer with alpha channel support)
- Octree
- Wu
- Basic color structs with implicit operators. Vector backed.#260
- Color - Float based, premultiplied alpha, No limit to r, g, b, a values allowing for a fuller color range.
- BGRA32
- CIE Lab
- CIE XYZ
- CMYK
- HSV
- HSL
- YCbCr
- Basic shape primitives (Unfinished and could possible be updated by using Vector2, Vector3, etc)
- Rectangle
- Size
- Point
- Ellipse
- Resampling algorithms. (Optional gamma correction, Performance improvements?)
- Box
- Bicubic
- Lanczos3
- Lanczos5
- Lanczos8
- MitchelNetravali
- Nearest Neighbour
- Robidoux
- Robidoux Sharp
- Robidoux Soft
- Spline
- Triangle
- Welch
- Cropping
- Rectangular Crop
- Elliptical Crop
- Entropy Crop
- Rotation
- Flip (90, 270, FlipType etc)
- Rotate by angle
- ColorMatrix operations (Uses Matrix4x4)
- BlackWhite
- Greyscale BT709
- Greyscale BT601
- Hue
- Saturation
- Lomograph
- Polaroid
- Kodachrome
- Sepia
- Achromatomaly
- Achromatopsia
- Deuteranomaly
- Deuteranopia
- Protanomaly
- Protanopia
- Tritanomaly
- Tritanopia
- Edge Detection
- Kayyali
- Kirsch
- Laplacian3X3
- Laplacian5X5
- LaplacianOfGaussian
- Prewitt
- RobertsCross
- Scharr
- Sobel
- Blurring/ Sharpening
- Gaussian blur
- Gaussian sharpening
- Box Blur
- Filters
- Alpha
- Contrast
- Invert
- BackgroundColor
- Brightness
- Pixelate
- Blend
- Mask
- Vignette
- Glow
- Threshold
- Effects
- Path brush (Need help)#264
- Pattern brush (Need help)#264
- Elliptical brush (Need help)#264
- Gradient brush (vignette? Need help)#264
- Other stuff I haven't thought of.
###What might never happen
- Exif manipulation - There's a lot of quirks in parsing EXIF and I'd need a ton of help to get it all coded.#78
- Font support (Depends on new System.Text stuff) I don't know where to start coding this so if you have any pointers please chip in.
###API Changes
With this version the API will change dramatically. Without the constraints ofSystem.Drawing I have been able to develop something much more flexible, easier to code against, and much, much less prone to memory leaks. Gone are using image classes which implementsIDisposable, Gone are system wide proces locks with Images and processors thread safe usable in parallel processing utilizing all the availables cores.
Image methods are also fluent which allow chaining much like theImageFactory class in the Framework version.
Here's an example of the code required to resize an image using the default Bicubic resampler then turn the colors into their greyscale equivalent using the BT709 standard matrix.
using(FileStreamstream=File.OpenRead("foo.jpg")){Imageimage=newImage(stream);using(FileStreamoutput=File.OpenWrite("bar.jpg")){image.Resize(image.Width/2,image.Height/2).Greyscale().Save(output);}}
It will also be possible to pass collections of processors as params to manipulate images. For example here I am applying a Gaussian blur with a sigma of 5 to an image, then detecting the edges using a Sobel operator working in greyscale mode.
using(FileStreamstream=File.OpenRead("foo.jpg")){Imageimage=newImage(stream);using(FileStreamoutput=File.OpenWrite("bar.jpg")){List<IImageProcessor>processors=newList<IImageProcessor>(){newGuassianBlur(5),newSobel{Greyscale=true}};image.Process(processors.ToArray()).Save(output);}}
Individual processors can be initialised and apply processing against images. This allows nesting which will allow the powerful combination of processing methods:
newBrightness(50).Apply(sourceImage,targetImage,sourceImage.Bounds);
All in all this should allow image processing to be much more accessible to developers which has always been my goal from the start.
###How can you help?
Please... Spread the word, contribute algorithms, submit performance improvements, unit tests. Help me set up CI for nightly releases.
Performance is a biggie, if you know anything about the new vector types and can apply some fancy new stuff with that it would be awesome.
There's a lot of developers out there who could write this stuff a lot better and faster than I and I would love to see what we collectively can come up with so please, if you can help in any way it would be most welcome and benificial for all.
###The ImageProcessor Team
Grand High Eternal Dictator
Core Team
About
📷 A cross-platform library for processing of image files written in C#
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- C#99.9%
- JavaScript0.1%