Sunday, April 1, 2012

Dynamically generating thumbnail images in ASP.NET with C#


  <img src="CreateThumbnail.aspx?image=upload/product/<%# Eval("image") %>&width=50" />

 CreateThumbnail.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;

public partial class CreateThumbnail : System.Web.UI.Page
{
    private void Page_Load(object sender, System.EventArgs e)
    {
        string Image = Request.QueryString["Image"];
        if (Image == null)
        {
            this.ErrorResult();
            return;
        }
        string sSize = Request["Size"];
        int Size = 120;
        if (sSize != null)

            Size = Int32.Parse(sSize);

        string Path = Server.MapPath(Request.ApplicationPath) + "\\" + Image;
        Bitmap bmp = Thumbnail(Path, Size, Size);

        if (bmp == null)
        {
            this.ErrorResult();
            return;
        }
        string OutputFilename = null;
        OutputFilename = Request.QueryString["OutputFilename"];
        if (OutputFilename != null)
        {

            if (this.User.Identity.Name == "")
            {

                bmp.Dispose();
                this.ErrorResult();

            }
            try
            {

                bmp.Save(OutputFilename);

            }

            catch (Exception ex)
            {
                bmp.Dispose();
                this.ErrorResult();
                return;
            }

        }
        Response.ContentType = "image/jpeg";
        bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        bmp.Dispose();

    }
    private void ErrorResult()
    {
        Response.Clear();
        Response.StatusCode = 404;
        Response.End();
    }
    public static Bitmap Thumbnail(string lcFilename, int lnWidth, int lnHeight)
    {
        System.Drawing.Bitmap bmpOut = null;
        try
        {
            Bitmap loBMP = new Bitmap(lcFilename);
            ImageFormat loFormat = loBMP.RawFormat;
            decimal lnRatio;
            int lnNewWidth = 0;
            int lnNewHeight = 0;
            if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)

                return loBMP;
            if (loBMP.Width > loBMP.Height)
            {

                lnRatio = (decimal)lnWidth / loBMP.Width;

                lnNewWidth = lnWidth;

                decimal lnTemp = loBMP.Height * lnRatio;

                lnNewHeight = (int)lnTemp;

            }

            else
            {

                lnRatio = (decimal)lnHeight / loBMP.Height;

                lnNewHeight = lnHeight;

                decimal lnTemp = loBMP.Width * lnRatio;

                lnNewWidth = (int)lnTemp;

            }


            bmpOut = new Bitmap(lnNewWidth, lnNewHeight);

            Graphics g = Graphics.FromImage(bmpOut);

            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);

            g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);



            loBMP.Dispose();

        }

        catch
        {

            return null;

        }



        return bmpOut;

    }



}