I have succeeded in getting an image to become resized (in kB) in case it would be too large, see code below. However, I am not really impressed with the loss of quality and wonder if there is a better way to tweak the parameters.
What my code oes is to take the image file, make a bitmap of it, then compress it by reducing the image quality. If the file size is below a treshold value it will replace the old image. When I try this code, if I have a 750 kB image, it will go down to
a quality percentage of about 50 before it reaches below 300 kB in size (which is my preferred value), and then the image doesn't look very appealing. Any ideas for tweaking?
/Pettrer
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim filnamn As String = "~\img\DSCtest.JPG"
Bildkomprimering(filnamn, 300)
End Sub
Protected Sub Bildkomprimering(ByVal filnamn As String, ByVal maxkB As Integer)
Dim objImage As Image
Dim forstor As Boolean = True
Dim procent As Integer = 80
Try
While forstor = True And procent > 5
objImage = Image.FromFile(Server.MapPath(filnamn))
Dim target As New Bitmap(objImage.Width, objImage.Height)
Dim e As Imaging.EncoderParameters
' Jpeg image codec
Dim jpegCodec As Imaging.ImageCodecInfo = Imaging.ImageCodecInfo.GetImageEncoders()(1)
e = New Imaging.EncoderParameters(2)
e.Param(0) = New Imaging.EncoderParameter(Imaging.Encoder.Quality, procent)
e.Param(1) = New Imaging.EncoderParameter(Imaging.Encoder.Compression, CLng(Imaging.EncoderValue.CompressionLZW))
Dim ms As IO.MemoryStream = New IO.MemoryStream
target.Save(ms, jpegCodec, e)
target.Dispose()
Dim tmpstorlek As Integer = ms.Length / 1024
'checking file size
If tmpstorlek > maxkB Then 'image too large
forstor = True
If tmpstorlek > 500 Then
procent /= 2 'just to skip some roundtrips
Else
procent /= 1.3
End If
Else
forstor = False
objImage.Dispose()
Dim fs As New FileStream(Server.MapPath(filnamn), FileMode.Create) : ms.WriteTo(fs) : fs.Close()
ms.Dispose()
End If
End While
Catch
'Don't bother as it's not the end of the world if an image is too large
End Try
End Sub
Member
151 Points
455 Posts
How to compress to better quality
Nov 02, 2012 05:35 PM|pettrer|LINK
Hi all,
I have succeeded in getting an image to become resized (in kB) in case it would be too large, see code below. However, I am not really impressed with the loss of quality and wonder if there is a better way to tweak the parameters.
What my code oes is to take the image file, make a bitmap of it, then compress it by reducing the image quality. If the file size is below a treshold value it will replace the old image. When I try this code, if I have a 750 kB image, it will go down to a quality percentage of about 50 before it reaches below 300 kB in size (which is my preferred value), and then the image doesn't look very appealing. Any ideas for tweaking?
/Pettrer
All-Star
52663 Points
15716 Posts
Re: How to compress to better quality
Nov 02, 2012 08:40 PM|oned_gk|LINK
I think using default compression level value of photoshop/corelphotopaint is better.
I am forget the level value, its about 10% till 30% i think.
try open photoshop/photopaint save image to jpg and see the default compression level.
Suwandi - Non Graduate Programmer