Avatar billede cmau Nybegynder
09. maj 2007 - 18:26 Der er 2 kommentarer og
1 løsning

Billeder fylder helvedes meget efter de køres gennem mit program

Hej eksperter

Jeg har lavet et program til at lave thumbnails.

Det dur fint. Men så ville jeg lave en test. Jeg havde en mappe med 1879 billeder, som fyldte 67 mb.

Men efter alle disse billeder blev kørt gennem mit program (altså lavet igen, med samme størrelser) så fyldte de 1879 billeder 820 mb.

Hvordan kan det lige gå til. Min kode til at lave de nye billeder ser sådan her ud:

    Function CreateImage(ByVal image, ByVal newname)
        Dim finalheight As Integer
        Dim finalwidth As Integer
        sti = address & "\" & image
        Dim b As New Bitmap(sti)
        If My.Computer.FileSystem.DirectoryExists(Destdir.Text) = False Then
            My.Computer.FileSystem.CreateDirectory(Destdir.Text)
        End If
        finalheight = 450
        finalwidth = Math.Round((finalheight / (b.Height / b.Width)))
        Dim newImg As Image = New Bitmap(finalwidth, finalheight)
        Dim g As Graphics = Graphics.FromImage(newImg)
        g.DrawImage(b, 0, 0, finalwidth, finalheight)
        newname = newname & ".jpg"
        newImg.Save(Destdir.Text & "\" & newname)
        b.Dispose()
        g.Dispose()
        newImg.Dispose()
        Return True
    End Function
Avatar billede bernhof Nybegynder
09. maj 2007 - 22:52 #1
Jeg svarede på et lignende spørgsmål for noget tid siden (http://www.eksperten.dk/spm/701071). Her er et udsnit af mit svar:

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

Det er compression, der er tale om. Som udgangspunkt laver .NET vist ingen compression, men med følgende kode kan du angive, i hvilken kvalitet JPG-billedet skal gemmes (og derved også filstørrelsen).

Disse to første rutiner skal placeres et sted i din kode (husk at importere namespacet System.Drawing.Imaging):


  Public Function FindEncoder(ByVal pImageFormat As ImageFormat) As ImageCodecInfo
    'Benyttes til en finde en encoder ud fra et givent format:
    Dim lCodecInfos() As ImageCodecInfo
    lCodecInfos = ImageCodecInfo.GetImageEncoders
    For Each lCodecInfo As ImageCodecInfo In lCodecInfos
      If lCodecInfo.FormatID = pImageFormat.Guid Then
        Return lCodecInfo
      End If
    Next
    Return Nothing
  End Function

  Public Sub SaveCompressedJPEG(ByVal pImage As Image, _
                                ByVal pFileName As String, _
                                ByVal pQuality As Int32)
    'Find JPEG-encoder:
    Dim lEncoder As ImageCodecInfo = FindEncoder(ImageFormat.Jpeg)
    'Tilføj quality-parameter:
    Dim lParams As EncoderParameters = New EncoderParameters(1)
    lParams.Param(0) = New EncoderParameter(Encoder.Quality, pQuality)
    'Gem billede til fil:
    pImage.Save(pFileName, lEncoder, lParams)
  End Sub


Herefter kan du nu skrive denne ene linie for at gemme et JPG-billede med en kvalitetsfaktor fra 1-100 (1 er laveste kvalitet, 100 er højeste kvalitet):


  SaveCompressedJPEG(objImage, "C:\billede.jpg", 50)


Håber det hjælper.
Avatar billede cmau Nybegynder
17. maj 2007 - 12:00 #2
nice tusind tak :D Smid svar.
Avatar billede bernhof Nybegynder
17. maj 2007 - 13:40 #3
Svar :-)
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
Kurser inden for grundlæggende programmering

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