• 制作最清晰缩略图的完整类(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), NothingNew 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 StringByVal CharValue As StringAs String

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

            
    Return MyStr(MyStr.Length - 1)

        
    End Function


    End Class

    转自:http://guoblog.com/blogview.asp?logID=259

    青苹果Web应用商店 https://webapp.taobao.com/

    PHP/ASP.NET/ASP/UCHOME/DISCUZ! X系列网站开发,详细需求联系QQ:8511978

  • 相关阅读:
    APS.NET MVC + EF (14)---项目框架搭建
    APS.NET MVC + EF (11)---过滤器
    APS.NET MVC + EF (10)---使用AJAX
    APS.NET MVC + EF (06)---模型
    APS.NET MVC + EF (08)---数据注解和验证
    APS.NET MVC + EF (07)---表单和HTML辅助方法
    APS.NET MVC + EF (05)---控制器
    错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    VS2010中项目配置引入GDAL
    Win7(32/64)VS2010配置编译GDAL环境(图文教程+亲测可用!)
  • 原文地址:https://www.cnblogs.com/Dicky/p/122371.html
Copyright © 2020-2023  润新知