我的博客

asp.net 自学笔记及开发过程中的经验、技巧、摘录
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net生成高质量缩略图函数(vb代码)

Posted on 2006-04-27 10:41  Net_Learner  阅读(730)  评论(4)    收藏  举报

在网上找的都是用C#写的.参考了一下.自己转换成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(ByVal originalImagePath As StringByVal thumbnailPath As StringByVal width As IntegerByVal height As IntegerByVal 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(00, 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

使用原来的上传后直接生成缩略图效果太差了..