Click here to Skip to main content
15,881,172 members
Articles / Programming Languages / C#
Article

A C# image enhancement filters library

Rate me:
Please Sign up or sign in to vote.
4.90/5 (51 votes)
11 May 2007LGPL32 min read 175.1K   4.1K   157   61
A set of filters to modify and style your images and photos

Library Home Page

Screenshot - box_colors2.png

Introduction

This project started from a need. A need to have a simple image/photo .NET filters functionality to style and enhance pictures to be displayed on the web (or any other place for that matter). True, there are some filter libraries scattered around the web for doing stuff like a WaterMark or a GrayScale or even a collection of those (ImageMagick). In most cases they are very basic or unhelpful for styling images. Furthermore, the .NET System.Drawing.* namespace doesn't provide any basic or sophisticated capabilities. For example, there isn't a proper rotate or resize functionality. So the goal was to collect all of the nice .NET filters that are out there into a single package and to extend it by providing more useful and styled filters.

Implementation

From the need that was described above I've created YAEL, which stands for: Yet Another Image Enhancement Library.

It is just a framework and filter classes. No UI (for now). The framework is very basic and simple so that extensions can easily be developed.

There is a basic IFilter interface and a BasicFilter abstract class. All of the filters derive from the BasicFilter class.

Current library filters consist of

  • Resize
  • Rotate
  • Grayscale
  • Rounded Corners
  • Boxing
  • Drop Shadow
  • Polaroid frame
  • Text and wartermark captions
  • Image watermark
  • Floor Reflection
  • FishEye
  • Skew
  • And more to come...

Here are some Samples:

Screenshot - grayScale_brighter.png

Screenshot - rotate_minus_30.png

Screenshot - rounded_35.png

Screenshot - box_colors2.png

Screenshot - dropShadow.png

Screenshot - dropShadow.png

Screenshot - text_water_middle_left.png

Screenshot - image_watermark_pacman.png

Screenshot - image_fisheye_default.png

Screenshot - image_floor_reflection.png

Screenshot - image_skew_plain.png

Usage

Usage is very straightforward. All you have to do is reference the library assemblies, load up an image, initialize a filter, execute the filter, and save back the transformed image.

Here is a sample:

C#
static void Main(string[] args)
{
    Image myImg = Bitmap.FromFile("cat.jpg");
    Image transformedImage;
    ZRLabs.Yael.BasicFilters.TextWatermarkFilter watermark = new 
        TextWatermarkFilter();
    ZRLabs.Yael.BasicFilters.BoxFilter box = new BoxFilter();
    ZRLabs.Yael.BasicFilters.BlackAndWhiteFilter blackAndWhite = new 
        BlackAndWhiteFilter();

    //A text watermark example
    watermark.Caption = "Test";
    watermark.AutomaticTextSize = true;
    transformedImage = watermark.ExecuteFilter(myImg);
    transformedImage.Save("cat_watermark.png", 
        System.Drawing.Imaging.ImageFormat.Png);

    //A boxing example
    transformedImage = box.ExecuteFilter(myImg);
    transformedImage.Save("cat_box.png", 
        System.Drawing.Imaging.ImageFormat.Png);

    //A grayscale example
    transformedImage = blackAndWhite.ExecuteFilter(myImg);
    transformedImage.Save("cat_blackAndWhite.png", 
        System.Drawing.Imaging.ImageFormat.Png);
}

Update

  • 15-Dev-2006
    • V1.0.3.0 Released
      • Added the Fisheye, FloorReflection and Skew filters.
      • Added a pipeline helper class for easy and fluent transformations.
  • 28-Nov-2006
    • Added the ability to use images on the BoxFilter on the top and side panels.
      Check out the samples page for examples.
  • 27-Nov-2006
    • Added a KeepAspectRatio property to the ResizeFilter
  • 23-Nov-2006
    • Added an image watermark filter
    • Changed the license to LGPL

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionDoubts over its code example Pin
LuizItatiba20-Jul-08 12:46
LuizItatiba20-Jul-08 12:46 
AnswerRe: Doubts over its code example Pin
Roiy Zysman21-Jul-08 5:32
Roiy Zysman21-Jul-08 5:32 
QuestionRe: Doubts over its code example Pin
LuizItatiba21-Jul-08 7:20
LuizItatiba21-Jul-08 7:20 
GeneralI saw your link in Samples of http://www.dotnetclan.com/zrlabs/yael/YaelMain.htm Pin
LuizItatiba18-Jul-08 16:48
LuizItatiba18-Jul-08 16:48 
AnswerRe: I saw your link in Samples of http://www.dotnetclan.com/zrlabs/yael/YaelMain.htm Pin
Roiy Zysman18-Jul-08 23:51
Roiy Zysman18-Jul-08 23:51 
QuestionRe: I saw your link in Samples of http://www.dotnetclan.com/zrlabs/yael/YaelMain.htm Pin
LuizItatiba19-Jul-08 7:04
LuizItatiba19-Jul-08 7:04 
QuestionHow to combine several images ino one? Pin
Andrie Kostyuk27-Jul-07 8:26
Andrie Kostyuk27-Jul-07 8:26 
AnswerRe: How to combine several images ino one? [modified] Pin
Roiy Zysman6-Aug-07 19:12
Roiy Zysman6-Aug-07 19:12 
I thought of putting this kind of filter in. I'll probably add it to a future release.
But here is a sample of how to do this in the meantime.
Hope it helps

inputImage = @"c:\temp\cat.jpg";
outputImage = @"c:\temp\cat_out.jpg";
Bitmap bm = Bitmap.FromFile("c:\temp\back.jpg"); //Your 800x600 background image
Graphics g = Graphics.FromImage(bm);
System.Drawing.Image fore =System.Drawing.Image.FromFile(@"c:\temp\cat.jpg";);
//upper left corner starts from 0,0 -> can be changed to whatever you want
g.DrawImage(_img, 0, 0, fore.Width, fore.Width);
bm.Save(outputImage, System.Drawing.Imaging.ImageFormat.Jpeg);

Roiy

modified on Saturday, July 19, 2008 5:53 AM

GeneralRe: How to combine several images ino one? Pin
Andrie Kostyuk7-Aug-07 4:00
Andrie Kostyuk7-Aug-07 4:00 
GeneralCan´t use imageWaterMark.Halign ... Pin
LordMM10-Jun-07 23:41
LordMM10-Jun-07 23:41 
AnswerRe: Can´t use imageWaterMark.Halign ... Pin
Roiy Zysman12-Jun-07 10:41
Roiy Zysman12-Jun-07 10:41 
QuestionImage with rounded corners and a border... Pin
Timur Zanagar1-Jun-07 3:35
Timur Zanagar1-Jun-07 3:35 
AnswerRe: Image with rounded corners and a border... Pin
Roiy Zysman1-Jun-07 6:22
Roiy Zysman1-Jun-07 6:22 
GeneralRe: Image with rounded corners and a border... Pin
Timur Zanagar1-Jun-07 6:53
Timur Zanagar1-Jun-07 6:53 
AnswerRe: Image with rounded corners and a border... [modified] Pin
Roiy Zysman1-Jun-07 11:13
Roiy Zysman1-Jun-07 11:13 
GeneralRe: Image with rounded corners and a border... Pin
Timur Zanagar3-Jun-07 9:57
Timur Zanagar3-Jun-07 9:57 
GeneralCan't compile Pin
Joe Sonderegger23-May-07 22:19
Joe Sonderegger23-May-07 22:19 
GeneralRe: Can't compile Pin
Roiy Zysman27-May-07 22:31
Roiy Zysman27-May-07 22:31 
GeneralRe: Can't compile Pin
Joe Sonderegger28-May-07 18:45
Joe Sonderegger28-May-07 18:45 
GeneralRe: Can't compile Pin
Roiy Zysman29-May-07 10:19
Roiy Zysman29-May-07 10:19 
GeneralRe: Can't compile Pin
Joe Sonderegger29-May-07 19:42
Joe Sonderegger29-May-07 19:42 
GeneralSuggestion for new filters Pin
CarlosMMartins14-May-07 22:37
CarlosMMartins14-May-07 22:37 
AnswerRe: Suggestion for new filters Pin
Roiy Zysman17-May-07 10:15
Roiy Zysman17-May-07 10:15 
QuestionWhere's crop? Pin
mmedia27-Feb-07 7:59
mmedia27-Feb-07 7:59 
AnswerRe: Where's crop? Pin
Roiy Zysman2-Mar-07 11:23
Roiy Zysman2-Mar-07 11:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.