源代码:
Imports System
Imports System.Web
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class ModuleUpLoadImage
    Inherits UserControl    '缩略图的最大宽度与高度,单位:像素,默认200X200
    Private mThumbImageWidth As Integer = 200
    Private mThumbImageHeight As Integer = 200    Protected WithEvents btnUpLoad As System.Web.UI.HtmlControls.HtmlInputButton
    Protected WithEvents ThumbImage As System.Web.UI.WebControls.ImageButton
    Protected WithEvents FileUpLoadImage As System.Web.UI.HtmlControls.HtmlInputFile    Private mImageName As String
    Private mAppPath As String
    Private mImageUrlPath As String
    Private mFileNameNoEXT As String    Public Event UpLoadError(ByVal sender As System.Object, ByVal errorMessage As String)
#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
    End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码    End Sub    'AppPath属性用于读取/设置保存文件的物理路径
    Public Property AppPath() As String
        Get
            AppPath = mAppPath
        End Get
        Set(ByVal value As String)
            mAppPath = value
        End Set
    End Property
    'ImageUrl属性用于读取/设置图像文件的URL路径
    Public Property ImageUrlPath() As String
        Get
            ImageUrlPath = mImageUrlPath
        End Get
        Set(ByVal value As String)
            mImageUrlPath = value
        End Set
    End Property    Public Property ImageNameNoEXT() As String
        Get
            ImageNameNoEXT = mFileNameNoEXT
        End Get
        Set(ByVal value As String)
            mFileNameNoEXT = value
        End Set
    End Property    Public Property ThumbImageHeight() As Integer
        Get
            ThumbImageHeight = mThumbImageHeight
        End Get
        Set(ByVal value As Integer)
            mThumbImageHeight = value
        End Set
    End Property    Public Property ThumbImageWidth() As Integer
        Get
            ThumbImageWidth = mThumbImageWidth
        End Get
        Set(ByVal value As Integer)
            mThumbImageWidth = value
        End Set
    End Property    Private Sub btnUpLoad_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpLoad.ServerClick
        Dim myFileEXT As String
        '-------------------------------------------------------
        '第一步: 确定是否有合格的图片上传
        '-------------------------------------------------------        '判断有没有文件上传,如果没有退出
        If FileUpLoadImage.PostedFile Is Nothing Then
            Response.Write("无效的图形格式。")
            Exit Sub
        End If
        '取得上传图象文件的文件名,扩展名(用于下面确定图象格式)
        '及不带扩展名的文件名(用于保存)
        mImageName = FileUpLoadImage.PostedFile.FileName
        myFileEXT = Path.GetExtension(mImageName)
        If mFileNameNoEXT Is Nothing Then
            mFileNameNoEXT = Path.GetFileNameWithoutExtension(mImageName)
        End If
        '检查文件格式,不是以下几种则退出
        Select Case myFileEXT.ToLower
            Case ".gif", ".jpg", ".png", ".bmp", ".tiff", ".wmf", ".emf"
                'do nothing
            Case Else
                Exit Sub
        End Select        '----------------------------------------------------------------------------
        '第二步:
        '尝试从上传的文件流中创建Image对象,并赋给变量mImage
        '---------------------------------------------------------------------------
        Dim myImage As Image
        Try
            myImage = Image.FromStream(FileUpLoadImage.PostedFile.InputStream)
        Catch ex As Exception
            Exit Sub
        End Try        '-----------------------------------------------------------------
        '第三步:从原图的大小,按比例获得新图片的大小
        '        缩小比例由原图宽与高的比确定,如果图比较扁(宽>高),则宽为最大值,
        '        否则高为最大值
        '-----------------------------------------------------------------        Dim OldHeight As Int32
        Dim OldWidth As Int32
        Dim NewHeight As Int32 = mThumbImageHeight
        Dim NewWidth As Int32 = mThumbImageWidth        OldHeight = myImage.Height
        OldWidth = myImage.Width
        If OldHeight >= OldWidth Then  '图比较窄
            NewWidth = OldWidth * (mThumbImageHeight / OldHeight)
        Else
            NewHeight = OldHeight * (mThumbImageWidth / OldWidth)
        End If        '第四步:保存缩略图
        Dim myThumbImage As Image '缩略图对象        '生成缩略图
        myThumbImage = myImage.GetThumbnailImage(NewWidth, NewHeight, Nothing, IntPtr.Zero)        '图像文件完整的保存路径
        Dim imgPath As String
        Dim myImageFullPath As String
        Dim myThumbImageFullPath As String
        imgPath = Path.Combine(mAppPath, mImageUrlPath.Replace("/", "\"))
        myImageFullPath = Path.Combine(imgPath, mFileNameNoEXT & ".jpg")
        myThumbImageFullPath = Path.Combine(imgPath, mFileNameNoEXT & "Thumb.jpg")        '以下确定缩略图的质量
        '下面8行,我也不太理解,只是查MSDN做出来的,出发点是想控制缩图的质量,
        '就像我们见到的常用图像软件那样,图像处理在.NET中要搞得通一点,就得啃一大堆内容,
        '就我而言感到涉及的东西太生( 有点畏惧)。反正我要的功能也差不多,只是精益求精而已。
        '如果哪位兄弟知道,不吝赐教。
        Dim myEncoder As Encoder
        Dim myEncoderParameter As EncoderParameter
        Dim myEncoderParameters As New EncoderParameters(1)
        Dim myImageCodecInfo As ImageCodecInfo
        myEncoder = Encoder.Quality
        myEncoderParameter = New EncoderParameter(myEncoder, 50L)
        myEncoderParameters.Param(0) = myEncoderParameter        myImageCodecInfo = ImageCodecInfo.GetImageEncoders(1)        '保存文件
        File.Delete(myImageFullPath)
        myImage.Save(myImageFullPath, Imaging.ImageFormat.Jpeg)
        myThumbImage.Save(myThumbImageFullPath, myImageCodecInfo, myEncoderParameters)        '释放资源
        myImage.Dispose()
        myThumbImage.Dispose()        '第五步:设置图像控件的的高度与宽度以适应新的图片,及设置ImageUrl用来显示图像
        ThumbImage.Width = Unit.Pixel(NewWidth)
        ThumbImage.Height = Unit.Pixel(NewHeight)        '显示imageButton控件
        ThumbImage.Visible = True
        ThumbImage.ImageUrl = mImageUrlPath & "/" & mFileNameNoEXT & "Thumb.jpg" & "?id=" & Int(Rnd(5) * 10000)
        '这里添加 "?id=" & Int(Rnd(5) * 10000)并不是传递什么服务器上需要处理的参数,
        '而是为了显示图像, 解决手工刷新的问题
        '上传图以后,客户没有再请求,所以服务器上新生成的图像不能传到客户端。
        '这是在网上一个MS给出的一个方法,为什么这样能行?我还是想不通,MS也没说什么理由
        '如果哪位兄弟知道,烦请转告在下。
    End Sub    Private Sub ThumbImage_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ThumbImage.Click
        '定位到大图
        Response.Redirect(mImageUrlPath & "/" & mFileNameNoEXT & ".jpg" & "?ID=" & Int(Rnd(5) * 10000))
    End Sub
End Class