webForumDet fria alternativet

JPEG Komprimering, EncoderParameters

3 svar · 543 visningar · startad av erka

erkaMedlem sedan dec. 19996 522 inlägg
#1

Hej!

Sitter å pillar med ett thumbnailsystem och har stött på något som jag inte vet hur jag ska lösa. Jag gör en thumbnail och komprimerar denna JPEG bild, men om jag har 100% kvalitet så blir ändå bilden rätt dålig i jämförelse med om jag förminskar storleken i tex photoshop.

Jag undrar om jag skrivit något fel i min kod som kanske gör att den inte fungerar så bra, eller så går det helt enkelt inte att få bättre kvalitet.

Dim JPEGQuality As Long = 100
	Dim EncParams As EncoderParameters = New EncoderParameters(1) 
	Dim EncParameter As EncoderParameter = New EncoderParameter(System.drawing.imaging.Encoder.Quality,JPEGQuality) 
	EncParams.Param(0) = EncParameter 
	Dim objImageCodecInfo() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders 

sedan sparar jag bilden med

NewImage.Save(NewFilePath,objImageCodecInfo(1), EncParams)

Sätter jag JPEGQuality till 20 så blir bilden helt värdelös så det fungerar ju hyffsat iaf. Men om den sätts till 100 så blir det som sagt inte vidare bra.

tacksam

xrobxMedlem sedan mars 2003106 inlägg
#2

Jag har gjort en thumbnail-konverterare (JPG) utan kvalitetsförlust på följande sätt:

------------------------------------------------------------------------------------------------------------
Dim TIA As System.Drawing.Image.GetThumbnailImageAbort
Dim imgFormat As Imaging.ImageFormat
Dim mImage As System.Drawing.Image

        imgFormat = Imaging.ImageFormat.Jpeg

        mImage = mImage.FromFile(Server.MapPath("minbild.jpg") )
        Dim btm As New Bitmap(mImage)
        mImage.Dispose()
        mImage = btm
        mImage = mImage.GetThumbnailImage(100, 100, TIA, IntPtr.Zero)
        mImage.Save(Server.MapPath("minbild_tbn.jpg") , imgFormat)

------------------------------------------------------------------------------------------------------------

Hoppas det kan vara till hjälp...

erkaMedlem sedan dec. 19996 522 inlägg
#3

Tack ska kolla på det lite mer, vad exakt gör "IntPtr.Zero"

Lasse0Medlem sedan mars 20032 inlägg
#4

Ett exempel på JPEG-komprimering

Hej
Jag håller själv på med en del test av denna funktion.

Nedanstående kan användas med följande exempel:

Imports System.Drawing
Imports System.Drawing.Imaging
/.../
Dim i As System.Drawing.Image = _
System.Drawing.Image.FromFile(Server.MapPath("images\some.tif"))
SaveJPGWithCompressionSetting(i, Server.MapPath("images\some.jpg"), 90)

Komprimering 1 - 100 där 100 är högsta kvalitet (lägst komprimering)

Följande exempel är saxat från MS KB:

Setting the JPEG Quality Factor.
The JPEG encoder in System.Drawing gives an encoder parameter for setting the JPEG quality factor when you save a JPEG file. This encoder parameter complies with the convention of using an integer with a range of 1 to 100.
The value of this encoder parameter influences the creation and use of quantization tables related to the suggested quality factor.

The following code sample shows how this encoder parameter is used to save a JPEG file with a specified quality factor:

Private Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
        Dim j As Integer
        Dim encoders As ImageCodecInfo()
        encoders = ImageCodecInfo.GetImageEncoders()
        For j = 0 To encoders.Length
            If encoders(j).MimeType = mimeType Then
                Return encoders(j)
            End If
        Next j
        Return Nothing
End Function

Private Sub SaveJPGWithCompressionSetting(ByVal image As Image, ByVal szFileName As String, ByVal lCompression As Long)
        Dim eps As EncoderParameters = New EncoderParameters(1)
        eps.Param(0) = New EncoderParameter(Encoder.Quality, lCompression)
        Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")
        image.Save(szFileName, ici, eps)
End Sub

Retrieve the Quality Factor from a JPEG File The quality factor is not stored directly in the JPEG file, so you cannot read the quality factor from the file.
However, you can read the quantization tables from the JPEG file
by using the PropertyItems property on the Image class. But even with the quantization tables, you cannot always determine a quality factor.

You might be able to determine the quality factor by comparing the quantization tables against the "standard" IJG-generated tables.
However, because some applications may use custom tables, you will not always find a match. For more information about the quantization tables, see the "References" section.

137 ms totalt · 3 externa anrop · v20260731065814-full.91fd2ad2
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)