Avatar billede shadowdance Nybegynder
13. april 2006 - 06:43 Der er 3 kommentarer og
1 løsning

Acceptabel filstørrelse efter resize

Hejsa,

jeg har lavet en funktion til on-the-fly resizing af images til brug for et fotoalbum. Den skal fyre billeder ned i et format, der er egnet til skærmen, fra fx digitalkamera'ernes absurde opløsning. Funktionen virker upåklageligt, men der er et stort men. Jeg ville gerne slække på kvaliteten samtidig, således at billederne ikke fylder så fandens meget.

P.t. sparer jeg ikke meget mere end 20-30% ved resizing, hvilket er uacceptabelt (i nogle tilfælde fylder resultat-filen mere end originalen!).

Måske hvis man kunne sætte DPI eller farvedybden ned, kunne man få en mere tålelig filstørrelse. Er der nogle der har erfaringer/løsningsforslag?

Her er funktionen:

    Private Sub CreateOptimized(ByVal file As FileInfo)
        Dim originalFile As Bitmap

        Try
            originalFile = New Bitmap(file.FullName)
        Catch ex As Exception
            Return
        End Try

        Dim opty As Integer = OPTIMIZED_HEIGHT
        Dim optx As Integer = originalFile.Width / (originalFile.Height / opty)
        Dim optim As New Bitmap(originalFile, optx, opty)

        Dim destination As DirectoryInfo = (New FileInfo(optimized.FullName & "\" & RelativePath(file))).Directory

        Try
            If Not destination.Exists Then
                destination.Create()
            End If

            optim.Save(optimized.FullName & "\" & RelativePath(file))
        Catch ex As Exception

        End Try

        optim.Dispose()
        originalFile.Dispose()
    End Sub
Avatar billede shadowdance Nybegynder
13. april 2006 - 06:45 #1
Måske skal jeg lige tilføje, at min OPTIMIZED_HEIGHT er en konstant der er sat til 480.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 09:23 #2
Du kan måske bruge disse funktioner:
Public Shared Sub Save(ByVal BM As Bitmap, ByVal S As Stream, ByVal Format As ImageFormat, ByVal Quality As Integer)
If Not (Format = ImageFormat.Jpeg) Then
  BM.Save(S, Format)
Else
  Dim Params As EncoderParameters = New EncoderParameters(1)
  Params.Param(0) = New EncoderParameter(Encoder.Quality, Quality)
  BM.Save(S, GetEncoderInfo("image/jpeg"), Params)
End If
End Sub

Private Shared Function GetEncoderInfo(ByVal MimeType As String) As ImageCodecInfo
Dim Result As ImageCodecInfo = Nothing
Dim Encoders As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders
Dim i As Integer = 0
While Result Is Nothing AndAlso i < Encoders.Length
  If Encoders(i).MimeType = MimeType Then
    Result = Encoders(i)
  End If
  System.Math.Min(System.Threading.Interlocked.Increment(i),i-1)
End While
Return Result
End Function
Avatar billede dr_chaos Nybegynder
13. april 2006 - 09:23 #3
Det kan være at de skal tilpasses dine behov.
Avatar billede shadowdance Nybegynder
14. april 2006 - 19:14 #4
Meget interessante muligheder man får der!

Men det skal tilføjes, at når man gemmer sit billede, skal man huske at skrive:

optim.Save(optimized.FullName & "\" & RelativePath(file), originalFile.Rawformat)

Dens sidste del henter formatet ind fra originalen. Dermed bliver filstørrelsen meget mindre, faktisk helt ned til 10% af originalen. Og så begynder det jo at hjælpe på det.

Det løste mit problem. Mn tak for hjælpen alligevel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester