У платформы .NET в классе System.Drawing.Image существует метод GetThumbnailImage, который позволяет просто и быстро получить миниатюру изображения. Но качество полученной миниатюры оказалось хуже чем хотелось.
Следующий код был написан для решения данной проблемы и позволяет выбирать качество получаемой миниатюры и используемый метод интерполяции. Данный фрагмент кода подразумевает наличие на форме стандартных ASP.NET контролов FileUpload и Button
Imports System.IO Imports System.Drawing Imports System.Drawing.Imaging Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If FileUpload1.HasFile Then ' высота, ширина и коэффициент соотношения сторон изображения Dim H, W As Integer, ratio As Decimal ' задаём ширину миниатюры изображения в 200 точек Dim ThumbnailWidth As Integer = 200 ' создаём объект System.Drawing.Image, загружаем в него изображения из стандартного контрола FileUpload Dim objImage As System.Drawing.Image = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream) ' получаем реальные размеры изображения H = objImage.Height W = objImage.Width ' получаем значение высоты миниатюры для заданной ширины ratio = W / ThumbnailWidth H = Decimal.Floor(H / ratio) ' код создания миниатюры изображения Dim grp As Graphics, bm As New Bitmap(ThumbnailWidth, H) grp = Graphics.FromImage(bm) grp.InterpolationMode = Drawing2D.InterpolationMode.Bicubic grp.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality grp.DrawImage(objImage, 0, 0, ThumbnailWidth, H) ' сохранение миниатюры в Jpeg формат с качеством 75% Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(Encoder.Quality, 75) Dim myImageCodecInfo As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) ' сохранение в файл Thumbnail.jpg bm.Save("Thumbnail.jpg", myImageCodecInfo, ep) grp.Dispose() bm.Dispose() objImage.Dispose() End If End Sub Private Shared Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo Dim j As Integer Dim encoders() As ImageCodecInfo encoders = ImageCodecInfo.GetImageEncoders() j = 0 While j < encoders.Length If encoders(j).FormatID = format.Guid Then Return encoders(j) End If j += 1 End While Return Nothing End Function End Class