Уменьшение размера изображения (далее) с ASP.NET
Я использую приведенный ниже код, чтобы уменьшить размер моего изображения. Работает нормально. Моя проблема в том, что изображение размером 3 МБ уменьшится до 470 КБ. Есть ли способ уменьшить размер файла еще больше? Я поиграл со всеми возможными настройками, касающимися режима интерполяции, режима сглаживания и других, но итоговое изображение по-прежнему составляет около 400 кб. Эти изображения используются на веб-сайте газеты и поэтому должны сохранять свои качества.
РЕДАКТИРОВАТЬ Размеры моего изображения 4000 x 3000 пикселей, и я уменьшаю до 650 пикселей в ширину.
Dim image_p As Image = _
ResizeImage(img, Convert.ToInt32(pWidth), Convert.ToInt32(pHeight))
Private Function ResizeImage( _
original_img As Bitmap, width As Integer, height As Integer) As Bitmap
Dim callback As New Image.GetThumbnailImageAbort(AddressOf GetThumbAbort)
Dim new_img As New Bitmap(original_img, width, height) 'new blank bitmap'
Dim g As Graphics = Graphics.FromImage(new_img)
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed
g.CompositingQuality = _
System.Drawing.Drawing2D.CompositingQuality.HighSpeed
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver
g.DrawImage(original_img, 0, 0, width, height)
Return new_img
End Function
1 ответ
Вы можете уменьшить размер, если используете метод Image.Save с опцией EncoderParametres.
Просто часть кода из примера MSDN:
'Save the bitmap as a JPEG file with quality level 50.
myEncoderParameter = New EncoderParameter(myEncoder, CType(50L, Int32))
myEncoderParameters.Param(0) = myEncoderParameter
myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters)
Примечание: другие используемые вами параметры влияют на композицию изображения, а не на конечный размер, когда вы создаете jpg. Они влияют на размер в зависимости от качества, чем выше резкость, тем выше размер, потому что jpeg нужно показать больше деталей, но окончательный размер изменяется по тому вызову, который у меня здесь есть.