Generating thumbnails during website development is a very common and practical function. previously, ASP can only be implemented using COM components. net can be easily implemented using the powerful class libraries of the framework. I posted the complete code (with detailed comments) in the following post. I have read some articles on the Internet and the content related to the Asp.net SDK. I have sorted out C # and VB. net.
Let's take a look at the following code:
''Shrink the image and save it.
Private sub savesmallpic (byval sfilename as string)
Dim image as system. Drawing. Image, newimage as system. Drawing. Image
Dim callb as system. Drawing. image. getthumbnailimageabort
Image = system. Drawing. image. fromstream (Me. file1.postedfile. inputstream)
If image. width <image. Height then
Newimage = image. getthumbnailimage (480,640, callb, new system. intptr (0 ))
Else
Newimage = image. getthumbnailimage (640,480, callb, new system. intptr (0 ))
End if
Image. Dispose ()
''To reduce the size of the new image and save it to the temporary path.
Newimage. Save (sfilename, system. Drawing. imaging. imageformat. JPEG)
Newimage. Dispose ()
End sub
Let's look at the following code to generate high-quality thumbnails (VB and C #)
VB. Ne code:
''' To generate a thumbnail
''''
'''' Source image path (physical path)
''' Thumbnail path (physical path)
''' Thumbnail width
''' Thumbnail height
''' How to generate a thumbnail
''''
Public shared sub makethumbnail (byval originalimagepath as string, byval thumbnailpath as string, byval width as integer, byval height as integer, byval mode as string)
Dim originalimage as system. Drawing. Image = system. Drawing. image. fromfile (originalimagepath)
Dim towidth as integer = width
Dim toheight as integer = height
Dim X as integer = 0
Dim y as integer = 0
Dim ow as integer = originalimage. Width
Dim Oh as integer = originalimage. Height
Select case Mode
Case "HW" ''specifies high-width Scaling (may be deformed)
Case "W" ''specifies the width, and the height is proportional.
Toheight = originalimage. Height * width/originalimage. Width
Case "H" ''specifies the height, width is proportional
Towidth = originalimage. Width * Height/originalimage. Height
Case "cut" ''specifies high width cut (not deformed)
If system. convert. todouble (originalimage. width)/system. convert. todouble (originalimage. height)> system. convert. todouble (towidth)/system. convert. todouble (toheight) then
Oh = originalimage. Height
Ow = originalimage. Height * towidth/toheight
Y = 0
X = (originalimage. Width-ow)/2
Else
Ow = originalimage. Width
Oh = originalimage. Width * Height/towidth
X = 0
Y = (originalimage. Height-OH)/2
End if
Case else
End select
''Create a BMP Image
Dim bitmap = new drawing. Bitmap (towidth, toheight)
''Create a canvas
Dim G as drawing. Graphics = drawing. Graphics. fromimage (Bitmap)
''Set a high quality Interpolation Method
G. interpolationmode = system. Drawing. drawing2d. interpolationmode. High
''Sets high quality and shows smoothness at low speeds.
G. smoothingmode = system. Drawing. drawing2d. smoothingmode. highquality
''Clear the canvas and fill it with a transparent background color
G. Clear (drawing. color. Transparent)
''At the specified position and draw the specified part of the original image according to the specified size
G. drawimage (originalimage, new drawing. rectangle (0, 0, towidth, toheight), new drawing. rectangle (X, Y, ow, oh), system. drawing. graphicsunit. pixel)
Try
''Save the thumbnail in JPG format
Bitmap. Save (thumbnailpath, system. Drawing. imaging. imageformat. JPEG)
Catch e as exception
Throw E
Finally
Originalimage. Dispose ()
Bitmap. Dispose ()
G. Dispose ()
End try
End sub
C # code:
////
/// Generate a thumbnail
///
/// Source image path (physical path)
/// Thumbnail path (physical path)
/// Thumbnail width
/// Thumbnail height
/// How to generate a thumbnail
Public static void makethumbnail (string originalimagepath, string thumbnailpath, int width, int height, string Mode)
{
Image originalimage = image. fromfile (originalimagepath );
Int towidth = width;
Int toheight = height;
Int x = 0;
Int y = 0;
Int ow = originalimage. width;
Int Oh = originalimage. height;
Switch (Mode)
{
Case "HW": // specify high-width Scaling (possibly deformed)
Break;
Case "W": // specify the width, and the height is proportional.
Toheight = originalimage. Height * width/originalimage. width;
Break;
Case "H": // specify the height. The width is proportional.
Towidth = originalimage. Width * Height/originalimage. height;
Break;
Case "cut": // specify the height and width (not deformed)
If (double) originalimage. width/(double) originalimage. Height> (double) towidth/(double) toheight)
{
Oh = originalimage. height;
Ow = originalimage. Height * towidth/toheight;
Y = 0;
X = (originalimage. Width-ow)/2;
}
Else
{
Ow = originalimage. width;
Oh = originalimage. Width * Height/towidth;
X = 0;
Y = (originalimage. Height-OH)/2;
}
Break;
Default:
Break;
}
// Create a BMP Image
Image bitmap = new Bitmap (towidth, toheight );
// Create a canvas
Graphics G = graphics. fromimage (Bitmap );
// Set a high quality Interpolation Method
G. interpolationmode = interpolationmode. High;
// Set high quality and smooth Low Speed
G. smoothingmode = smoothingmode. highquality;
// Clear the canvas and fill it with a transparent background color
G. Clear (color. Transparent );
// Draw the specified part of the original image at the specified position and in the specified size
G. drawimage (originalimage, new rectangle (0, 0, towidth, toheight ),
New rectangle (X, Y, ow, oh ),
Graphicsunit. pixel );
Try
{
// Save the thumbnail in JPG format
Bitmap. Save (thumbnailpath, imageformat. JPEG );
}
Catch (exception E)
{
Throw E;
}
Finally
{
Originalimage. Dispose ();
Bitmap. Dispose ();
G. Dispose ();
}
}
It is clearly displayed that the quality of the thumbnails generated by the first code is very poor, and the thumbnails generated by the following code are clear. Please try.