Click here to Skip to main content
Click here to Skip to main content

Thumbnails Generation

By , 6 Mar 2009
 

Introduction

I started as a developer several years ago creating websites. Now I'm working for a company which creates websites, but also multimedia applications. Each time we start developing a new solution, there's this need for image processing. In case of a website we need to generate thumbnails, and for our Windows applications images are restricted to a certain size. To accomplish thumbnails creation and image resizing, we use standard .NET Framework functions. However I was sick and tired of developing the same code over and over again with a slight difference required for each solution. Therefore I decided to develop an image processing class which is able to process images in a more dynamic way. 

Background

Basically the class is pretty simple. It resizes images and stores them again (or returns the image as an object if you like). Depending on your needs, you're able to set the image's size, quality, resizing method and so forth.

Using the Code

The ThumbnailCreation class exposes four properties:

  • ScalingOption
  • MaxImageLength
  • FileFormat
  • Quality

ScalingOption (read-only) Property

The scaling option enables you to tell the ThumbnailCreation class to scale the image in different ways. There are three options available:

  • MaintainAspect
  • CenterImage
  • FixedSize

You need to set the ScalingOption using a method called SetScalingOption(), which forces you to also define a size when scaling option FixedSize is used.
The default is called MaintainAspect which will maintain the aspect ratio and resize the image so that the largest image side (width or height) equals the value set using the MaxImageLength property.

MaintainAspect.jpg

When the ScalingOption is set to CenterImage, the center of the image will be scaled so that the largest side (width of height) of the image equals the value set using the MaxImageLength property. The center of the image is a square of half the width and half the height of an image. The image below shows you the result of a thumbnail created using the CenterImage scaling option.

CenterImage.jpg

The third scaling option is FixedSize. You need to define a size and your source image will be scaled to that size.

MaxImageLength Property

The MaxImageLength property is used to define the size of thumbnails. This property is only used for the scaling options MaintainAspect and CenterImage. The largest side of the image (width or height) will equal this value in pixels. The remaining side is scaled so that the aspect ratio of the image will be maintained.

FileFormat Property

The FileFormat property enables you to define whether images will be stored as JPEG or PNG image. The default is JPEG. This option is added because you may want to use the PNG format for transparency.

Examples

And now... a few examples of calling the object's StoreThumbnail (which actually stores a thumbnail version of your image on the harddrive). The next example shows you the easiest way of generating a thumbnail accepting all default values.

using (ThumbnailCreation objThumbnailCreator = new ThumbnailCreation())
    objThumbnailCreator.StoreThumbnail(SourceFile, DestinationFile);		

The example below shows the code for generating a thumbnail having the ScalingOption property set to CenterImage. The default thumbnail size of 120 pixels is changed to 150 pixels and the image's format will be PNG.

using (ThumbnailCreation objThumbnailCreator = new ThumbnailCreation())
{
    objThumbnailCreator.MaxImageLength = 150; // Max image side to 150 pixels
    objThumbnailCreator.Quality = 100; 	// Best quality
    objThumbnailCreator.SetScalingOption(ScalingOptions.CenterImage);
    objThumbnailCreator.FileFormat = FileFormats.PNG;
    objThumbnailCreator.StoreThumbnail(SourceFile, DestinationFile);
} 

History

  • 2009/03/06 - Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Eduard Keilholz
Software Developer (Senior) http://www.upbound.com
Netherlands Netherlands
Member
In 1998 I started as webdesigner programming websites in Perl and later PHP. After two years wrote most of the websites in ASP and from then on lost the feeling with a linux/unix platform.
 
Since 2001 interested in Windows applications and now writing software using mostly C# for about 7 years now.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionOut of Memory ExceptionmemberPeter Freestone6 Mar '13 - 10:54 
AnswerRe: Out of Memory ExceptionmemberEduard Keilholz9 Mar '13 - 9:28 
Suggestionratio calculation bug fixmemberKirk Quinbar22 Mar '12 - 11:31 
GeneralMy vote of 5memberaalhanane10 Jun '11 - 8:22 
GeneralMy vote of 5memberedjeit18 Mar '11 - 4:02 
GeneralThank you!membermhoward007 Dec '09 - 9:36 
GeneralDetermineSizeByRatiomemberlGiles19 May '09 - 10:34 
An error in this method, you know tell me how can I get?
 
private void DetermineSizeByRatio(Bitmap Source)
{
// This method will calculate the thumnail's image size depending
// on the original image's size.
 
decimal dcRectangle = (decimal)Source.Width / (decimal)Source.Height;
int iWidth = m_MaxLength;
int iHeight = m_MaxLength;
 
if (Source.Width >= Source.Height)
{
iWidth = m_MaxLength;
iHeight = int.Parse(decimal.Round((decimal)iWidth * dcRectangle, 0).ToString());
}
else
{
iHeight = m_MaxLength;
iWidth = int.Parse(decimal.Round((decimal)iHeight * dcRectangle, 0).ToString());
}
m_DestinationSize = new Size(iWidth, iHeight);
}
 
Thanks
 
Giles/Brazil/São Paulo
GeneralRe: DetermineSizeByRatiomemberEduard Keilholz19 May '09 - 21:28 
GeneralRe: DetermineSizeByRatiomemberlGiles20 May '09 - 5:47 
GeneralRe: DetermineSizeByRatiomemberEduard Keilholz20 May '09 - 10:54 
GeneralRe: DetermineSizeByRatiomemberlGiles20 May '09 - 11:04 
GeneralRe: DetermineSizeByRatiomemberEduard Keilholz25 May '09 - 21:15 
GeneralRe: DetermineSizeByRatiomemberlGiles26 May '09 - 8:09 
GeneralRe: DetermineSizeByRatiomemberEduard Keilholz26 May '09 - 23:55 
GeneralNice Artikle, thank you.memberHardy_Smith19 Mar '09 - 4:25 
GeneralRe: Nice Artikle, thank you.memberEduard Keilholz19 Mar '09 - 6:55 
GeneralRe: Nice Artikle, thank you.memberHardy_Smith19 Mar '09 - 7:31 
GeneralRe: Nice Artikle, thank you.memberEduard Keilholz19 Mar '09 - 10:14 
GeneralRe: Nice Artikle, thank you.memberlGiles26 May '09 - 8:22 
GeneralRe: Nice Artikle, thank you.memberHardy_Smith9 Oct '09 - 23:22 
GeneralGreat Stuff!memberSean J Conway17 Mar '09 - 17:44 

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

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 6 Mar 2009
Article Copyright 2009 by Eduard Keilholz
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid