源代码:
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
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
解决方案 »
- 在线等,请教treeview根据我选的dropdownlist的值来重新绑定,用AJAX怎么实现?
- 页面上,一敲回车键就会第一个提交按钮就会执行,怎么回事啊?
- 怎麼調用寫好的cs文件
- 求助!关于一个个性化空间的问题
- 请教各位高手:在ASP.NET下如何发送电子邮件?
- 文本框如何获得鼠标焦点?
- ★★在纯文本aspx页面中弹出信息框代码报错,如 CS1010: 常数中有换行符,请高手指点!
- varchar 值 '081027113804546403.JPG' 的转换溢出了 int 列。超出了最大整数值。
- 在asp.net中读取客户端机子的ip?
- 分离程序代码和网页内容
- 请教一个小问题,在存储过程中,怎么写这一句呢?
- 各位斑竹求救了(急救)
检查 这两句:应该是这的错误 可以设置断点单步运行查看错误。。myImage.Save(myImageFullPath, Imaging.ImageFormat.Jpeg)
myThumbImage.Save(myThumbImageFullPath, myImageCodecInfo, myEncoderParameters)检查方法参数,检查物理路径...希望能解决!