制作最清晰缩略图的完整类(VB.NET版)

该博客给出了一段VB.NET代码,用于图片上传与处理。代码中定义了相关变量和枚举类型,实现了图片类型检验、大文件保存、缩略图生成、小文件保存等功能,还包含删除临时文件操作,确保图片上传和处理的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先收集一些相关资源
PublicClassClassUpPic

PrivatevPicFileAsSystem.Web.UI.HtmlControls.HtmlInputFile

PrivatevSmallPicSize,vUpFileSizeAsInteger

PrivatevUpPicPath,vNewPicName,vTmpPicNameAsString

PrivatePicMin,PicMax,vPicMaxAsSystem.Drawing.Image

PrivatePicFormatAsSystem.Drawing.Imaging.ImageFormat

PrivateMinHeight,MinWidthAsDecimal

PrivateMyfileAsIO.File



PublicSubNew(ByValPicFileAsSystem.Web.UI.HtmlControls.HtmlInputFile,ByValUpPicTypeAsPicType)

vPicFile=PicFile

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

SelectCaseUpPicType

CasePicType.Face

vUpPicPath="upload/images/Face"

vSmallPicSize=150

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

CasePicType.Photo

vUpPicPath="upload/images/Photo"

vSmallPicSize=150

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

CasePicType.Pic

vUpPicPath="upload/images/Pic"

vSmallPicSize=550

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

EndSelect

EndSub



PublicFunctionGetSavedFileName()AsString

'检验图片类型=================================================================

IfvPicFile.PostedFile.FileName=""Then

ThrowNewNotSupportedException("文件为空,请您选择上传的图片文件!")

EndIf

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

ThrowNewNotSupportedException("文件格式不合法,请选取有效的图片文件!"&vPicFile.PostedFile.ContentType)

EndIf

IfvPicFile.PostedFile.ContentLength>vUpFileSizeThen

DimMaxNumberAsDecimal=vUpFileSize/1024/1024

ThrowNewNotSupportedException("上传的图片文件太大,最大支持"&Format(MaxNumber,"##,##0")&"M!")

EndIf



'检验数量限制=================================================================



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

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

vPicFile.Dispose()



'缩略图片文件=================================================================

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

IfNot(PicMax.RawFormatIsPicFormat.GifOrPicMax.RawFormatIsPicFormat.Png)Then

IfPicMax.Height>vSmallPicSizeOrPicMax.Width>vSmallPicSizeThen

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)

EndIf

EndIf

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

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

PicMax.Dispose()



'删除临时png文件=================================================================

IfvTmpPicName<>""ThenMyfile.Delete(HttpContext.Current.Server.MapPath(vUpPicPath&"/max/")&vTmpPicName)



ReturnvNewPicName

EndFunction



PrivateFunctionGetMinPic(ByValMaxPicAsSystem.Drawing.Image)AsSystem.Drawing.Image

IfMaxPic.Height>vSmallPicSizeOrMaxPic.Width>vSmallPicSizeThen

IfMaxPic.Height>MaxPic.WidthThen

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

MinHeight=vSmallPicSize

Else

MinWidth=vSmallPicSize

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

EndIf

ReturnMaxPic.GetThumbnailImage(CInt(MinWidth),CInt(MinHeight),Nothing,NewSystem.IntPtr())

Else

ReturnMaxPic

EndIf

EndFunction



EnumPicType

Face=1

Photo=2

Pic=3

EndEnum



PrivateFunctionGetRightByChar(ByValStrValueAsString,ByValCharValueAsString)AsString

DimMyStr()AsString=Split(StrValue,CharValue)

ReturnMyStr(MyStr.Length-1)

EndFunction

EndClass

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

VB 的相册(缩略图预览程序) VB的小型相册,实际上是一个图片浏览程序,打开时显示缩略图,鼠标点击显示大图片,并可接着浏览下去,程序相关说明:   函数功能: 该函数将指定位图的位拷贝到缓冲区里?   函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);   参数:   hbmp:指向感兴趣的位图的句柄?   cbBuffer:指定要从位图拷贝到缓冲区的字节数?   lpvBits:指向接收位图位数据的缓冲区指针?这些位是按字节型存储在数组中的?   返回值:如果该函数执行成功,那么返回值就是拷贝到缓冲区的字节数;如果该函数执行失败,那么返回值为0。   Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal nwCount As Long, lpBits As Any) As Long      函数功能:该函数将位图的颜色数据位设置成指定值?   函数原型:LONG SetBitmapBits(HBITMAP hmbp, DWORD cBytes, CONST VOID (lpBits);   参数:   hbmp:指向要设置的位图的句柄?   cBytes:指定参数lpBits指向的数组的字节数?   lpBits:指向字节型数组的指针?该数组中包含了指定位图的颜色数据?   返回值:如果该函数执行成功,则返回值就是在设置位图位时使用的字节数;如果失败,则返回值为0。      函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。   函数原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);   参数:   hgdiobj:指向感兴趣的图形对象的句柄,它可以是这样的一个句柄:一个逻辑位图、一个刷子、一种字体、一个调色板、笔或通过调用CreateDIBsection函数创建的与设备无关位图。   cbBuffer:指定将要写到缓冲区的信息的字节数目?‘lpvObject:指向一个缓冲区的指针,该缓冲区将要检索指定图形对象的信息。      函数功能描述:将一块内存的数据从一个位置复制到另一个位置   函数原型:VOID CopyMemory(PVOID Destination,CONST VOID *Source,DWORD Length);   参数:   Destination:要复制内存块的目的地址?   Source:要复制内存块的源地址?   Length:指定要复制内存块的大小,单位为字节   返回值:该函数为VOID型,没有返回值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值