ASP.NET 生成缩略图

以下代码根据生成图片的宽、高,生成四种模式的图片缩略图

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

public partial class ImgOperator_ImageCut : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MakeThumbImage("~/images/DSC01010.JPG", "~/images/cut5.jpg", 800, 450, "BGCUT");
    } 

    private void MakeThumbImage(string initPath, string outPath, int width, int height, string mode)
    {
        System.Drawing.Image image=System.Drawing.Image.FromFile(Server.MapPath(initPath));
        int tw = width;
        int th = height; 

        //生成的图片大小
        int sw = image.Width;
        int sh = image.Height;
        int x = 0;
        int y = 0; 

        switch (mode)
        { 
            case "HW":
                break;
            case "W":
                th = width * image.Height / image.Width;
                break;
            case "H":
                tw = height * image.Width / image.Height;
                break;
            case "CUT":
                if ((double)sw / (double)sh < (double)width / (double)height)
                {
                    sw = image.Width;
                    sh = image.Width * th / tw;
                    x = 0;
                    y = (image.Height - sh) / 2;
                }
                else
                {
                    sh = image.Height;
                    sw = image.Height * tw / th;
                    x = (image.Width - sw) / 2;
                    y = 0;
                }
                break;
            case "BGCUT":
                if ((double)width / (double)height < (double)image.Width / (double)image.Height)
                {
                    sw = image.Width;
                    sh = image.Width * th / tw;
                    x = 0;
                    y = (image.Height - sh) / 2;
                }
                else
                {
                    sh = image.Height;
                    sw = image.Height * tw / th;
                    x = (image.Width - sw) / 2;
                    y = 0;
                }
                break;
            default: break;
        }
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(tw, th);
        System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp); 

        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.Clear(System.Drawing.Color.WhiteSmoke); 

        g.DrawImage(image,new System.Drawing.Rectangle(0,0,tw,th),new System.Drawing.Rectangle(x,y,sw,sh),System.Drawing.GraphicsUnit.Pixel); 

        try
        {
            string oPath = Server.MapPath(outPath);
            bmp.Save(oPath, System.Drawing.Imaging.ImageFormat.Jpeg); 

            FileStream fs = new FileStream(oPath, FileMode.Open, FileAccess.Read);
            byte[] imgData = new byte[(int)fs.Length];
            fs.Read(imgData, 0, (int)fs.Length); 

            Response.BinaryWrite(imgData);
            Response.ContentType = "image/pjpeg";
            Response.End();
            //bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            image.Dispose();
            bmp.Dispose();
            g.Dispose();
        } 

    }
}
posted @ 2010-02-15 15:03  零纪录  阅读(163)  评论(0编辑  收藏  举报