asp.net生成缩略图通用函数(支持多种生成方式) 支持图片裁减

c#版本

/**//** <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="originalImagePath">源图路径(物理路径)</param>
        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>   
        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"://指定高宽缩放(可能变形)               
                    break;
                case "W"://指定宽,高按比例                   
                    toheight = originalImage.Height * width/originalImage.Width;
                    break;
                case "H"://指定高,宽按比例
                    towidth = originalImage.Width * height/originalImage.Height;                   
                    break;       
                case "Cut"://指定高宽裁减(不变形)               
                    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;
            }   
           
            //新建一个bmp图片
            Image bitmap = new System.Drawing.Bitmap(towidth,toheight);

            //新建一个画板
            Graphics g = System.Drawing.Graphics.FromImage(bitmap);

            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //清空画布并以透明背景色填充
            g.Clear(Color.Transparent);       

            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
                new Rectangle(x, y, ow,oh),
                GraphicsUnit.Pixel);

            try
            {           
                //以jpg格式保存缩略图
                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            catch(System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();                       
                g.Dispose();
            }
        }

///vb.net版本

    ' <param name="originalImagePath">源图路径(物理路径)</param>
    ' <param name="thumbnailPath">缩略图路径(物理路径)</param>
    ' <param name="width">缩略图宽度</param>
    ' <param name="height">缩略图高度</param>
    ' <param name="mode">生成缩略图的方式</param>   
    Public Shared Sub MakeThumbnail()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
        originalImage = 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" '指定高宽缩放(可能变形)               
            Case "W" '指定宽,高按比例                   
                toheight = originalImage.Height * width / originalImage.Width
            Case "H" '指定高,宽按比例
                towidth = originalImage.Width * height / originalImage.Height
            Case "Cut" '指定高宽裁减(不变形)               
                If CDbl(originalImage.Width) / CDbl(originalImage.Height) > CDbl(towidth) / CDbl(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

        '新建一个bmp图片
        Dim bitmap = New System.Drawing.Bitmap(towidth, toheight)

        '新建一个画板
        Dim g As Graphics = System.Drawing.Graphics.FromImage(bitmap)

        '设置高质量插值法
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High

        '设置高质量,低速度呈现平滑程度
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality

        '清空画布并以透明背景色填充
        g.Clear(Color.Transparent)

        '在指定位置并且按指定大小绘制原图片的指定部分
        g.DrawImage(originalImage, New Rectangle(0, 0, towidth, toheight), New Rectangle(x, y, ow, oh), GraphicsUnit.Pixel)

        Try
            '以jpg格式保存缩略图
            bitmap.Save(thumbnailPath)
        Catch ex As Exception
            Throw ex
        Finally
            originalImage.Dispose()
            bitmap.Dispose()
            g.Dispose()
        End Try
    End Sub 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值