製作最清晰縮略圖的完整類(VB.NET版)

Public Class ClassUpPic

    Private vPicFile As System.Web.UI.HtmlControls.HtmlInputFile

    Private vSmallPicSize, vUpFileSize As Integer

    Private vUpPicPath, vNewPicName, vTmpPicName As String

    Private PicMin, PicMax, vPicMax As System.Drawing.Image

    Private PicFormat As System.Drawing.Imaging.ImageFormat

    Private MinHeight, MinWidth As Decimal

    Private Myfile As IO.File

 

    Public Sub New(ByVal PicFile As System.Web.UI.HtmlControls.HtmlInputFile, ByVal UpPicType As PicType)

        vPicFile = PicFile

        vUpFileSize = HttpContext.Current.Application("UpFileSize")

        Select Case UpPicType

            Case PicType.Face

                vUpPicPath = "upload/images/Face"

                vSmallPicSize = 150

                vNewPicName = HttpContext.Current.Session("MemberID") & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

            Case PicType.Photo

                vUpPicPath = "upload/images/Photo"

                vSmallPicSize = 150

                vNewPicName = System.Guid.NewGuid.ToString() & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

            Case PicType.Pic

                vUpPicPath = "upload/images/Pic"

                vSmallPicSize = 550

                vNewPicName = System.Guid.NewGuid.ToString() & "." & GetRightByChar(vPicFile.PostedFile.FileName, ".")

        End Select

    End Sub

 

    Public Function GetSavedFileName() As String

        '檢驗圖片類型=================================================================

        If vPicFile.PostedFile.FileName = "" Then

            Throw New NotSupportedException("文件爲空,請您選擇上傳的圖片文件!")

        End If

        If Left(vPicFile.PostedFile.ContentType, 5) <> "image" Then

            Throw New NotSupportedException("文件格式不合法,請選取有效的圖片文件!" & vPicFile.PostedFile.ContentType)

        End If

        If vPicFile.PostedFile.ContentLength > vUpFileSize Then

            Dim MaxNumber As Decimal = vUpFileSize / 1024 / 1024

            Throw New NotSupportedException("上傳的圖片文件太大,最大支持" & Format(MaxNumber, "##,##0") & "M!")

        End If

 

        '檢驗數量限制=================================================================

 

        '保存大文件=================================================================

        vPicFile.PostedFile.SaveAs(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vNewPicName)

        vPicFile.Dispose()

 

        '縮略圖片文件=================================================================

        PicMax = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vNewPicName)

        If Not (PicMax.RawFormat Is PicFormat.Gif Or PicMax.RawFormat Is PicFormat.Png) Then

            If PicMax.Height > vSmallPicSize Or PicMax.Width > vSmallPicSize Then

                vTmpPicName = System.Guid.NewGuid.ToString() & ".png"

                vPicMax = PicMax

                PicMax.Save(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName, PicFormat.Png)

                vPicMax.Dispose()

                PicMax = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName)

            End If

        End If

        '保存小文件=================================================================

        GetMinPic(PicMax).Save(HttpContext.Current.Server.MapPath(vUpPicPath & "/min/") & vNewPicName, PicFormat.Jpeg)

        PicMax.Dispose()

 

        '刪除臨時png文件=================================================================

        If vTmpPicName <> "" Then Myfile.Delete(HttpContext.Current.Server.MapPath(vUpPicPath & "/max/") & vTmpPicName)

 

        Return vNewPicName

    End Function

 

    Private Function GetMinPic(ByVal MaxPic As System.Drawing.Image) As System.Drawing.Image

        If MaxPic.Height > vSmallPicSize Or MaxPic.Width > vSmallPicSize Then

            If MaxPic.Height > MaxPic.Width Then

                MinWidth = MaxPic.Width / (MaxPic.Height / vSmallPicSize)

                MinHeight = vSmallPicSize

            Else

                MinWidth = vSmallPicSize

                MinHeight = MaxPic.Height / (MaxPic.Width / vSmallPicSize)

            End If

            Return MaxPic.GetThumbnailImage(CInt(MinWidth), CInt(MinHeight), Nothing, New System.IntPtr())

        Else

            Return MaxPic

        End If

    End Function

 

    Enum PicType

        Face = 1

        Photo = 2

        Pic = 3

    End Enum

 

    Private Function GetRightByChar(ByVal StrValue As String, ByVal CharValue As String) As String

        Dim MyStr() As String = Split(StrValue, CharValue)

        Return MyStr(MyStr.Length - 1)

    End Function

End Class

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章