Public Function HandleImageUpload(ByVal serverPath As String, ByVal iWidth As Integer, ByVal iHeight As Integer) As String
Dim fileStream As Stream = imageUploader1.PostedFile.InputStream
Dim fileName As String
Dim newSize As Size = New Size
Dim extension As String
Dim imageBytes As Byte()
Dim stream As New FileStream(serverPath, FileMode.Create)
If imageUploader1.HasFile Then
If imageUploader1.FileBytes.Length < 4194304 Then
imageBytes = imageUploader1.FileBytes
fileName = imageUploader1.FileName
extension = Path.GetExtension(fileName)
If extension.ToLower = ".png" Or extension.ToLower = ".bmp" _
Or extension.ToLower = ".gif" Or extension.ToLower = ".jpg" Then
newSize.Width = iWidth
newSize.Height = iHeight
imageBytes = ResizeImageFile(fileStream, newSize)
stream.Write(imageBytes, 0, imageBytes.Length)
'need dispose or hte server will keep it'
stream.Dispose()
End If
End If
End If
End Function
Public Function ResizeImageFile(ByVal fileStream As Stream, ByVal newSize As Size) As Byte()
Dim memoryStream As MemoryStream = New MemoryStream
Dim oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(fileStream)
Dim newImage As Bitmap = New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
Dim canvas As Graphics = Graphics.FromImage(newImage)
canvas.SmoothingMode = SmoothingMode.AntiAlias
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
'question here'
newImage.Save(memoryStream, ImageFormat.Jpeg)
'Dispose right?'
oldImage.Dispose()
canvas.Dispose()
newImage.Dispose()
Return memoryStream.GetBuffer
End Function
End Class
- Après que je produis
Bitmap newImage
, pourrais-je l'enregistrer directement sur le serveur plutôt que l'enregistrer dansmemoryStream
De quelle ressource devrais-je disposer? En ce qui concerne MSDN
iDisposable
modèle, nous avons besoin de disposer de ressources non gérées. How to dispose managed resource in Dispose() method in C#?. Dois-je impliquerfinalizer
dans ce cas? est-ce que je fais bien?Les codes peuvent-ils être améliorés? par exemple. écrire au serveur, redimensionner la méthode, etc.
Cordialement,
merci beaucoup hâte il –
Je décide de générer FileSteam dans 'ResizeImage'. Bravo –
Bon! Alors, mon conseil m'a-t-il aidé? Nous qui demandons la responsabilité de marquer les réponses correctes en tant que telles et de leur donner des points si nous pensons qu'elles étaient utiles. – Aliostad