Avatar billede sholm Nybegynder
21. november 2007 - 11:06 Der er 2 kommentarer og
1 løsning

Resize jpg uden tab af kvalitet

Hej

Jeg har en upload funktion som resizer mine billeder, jeg har dog et par problemer med den.
1) Billedkvaliteten bliver ringere end originalen.
2) Billedet kommer til at fylde mere end originalen.

Jeg bruger denne funktion til resize:
private Bitmap resizeFile(Bitmap b, int MaxHeight, int MaxWidth)
{
  int nWidth = b.Width;
  int nHeight = b.Height;
  if (nHeight > MaxHeight)
  {
    nWidth = (int)((((double)b.Width) / ((double)b.Height)) * ((double)MaxHeight));
    nHeight = MaxHeight;
  }
  if (nWidth > MaxWidth)
  {
    nWidth = MaxWidth;
    nHeight = (int)((((double)b.Height) / ((double)b.Width)) * ((double)MaxWidth));
  }
  Bitmap bTemp = (Bitmap)b.Clone();
  b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  double nXFactor = (double)bTemp.Width / (double)nWidth;
  double nYFactor = (double)bTemp.Height / (double)nHeight;
  for (int x = 0; x < b.Width; ++x)
    for (int y = 0; y < b.Height; ++y)
      b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)), (int)(Math.Floor(y * nYFactor))));
      return b;
  }

Nogen der har en ide til hvordan jeg kan forbedre funktionen?
Avatar billede Slettet bruger
21. november 2007 - 11:16 #1
tja..

b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
kunne måske ændres til
b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);
Avatar billede pidgeot Nybegynder
21. november 2007 - 11:24 #2
Der er flere elementer i dette:

1) Din resize-rutine laver "nearest-neighbor" skalering, hvilket giver et særdeles dårligt resultat hvis du ikke skalerer med en heltalsfaktor (det gør det nu under alle omstændigheder, men ikke HELT så slemt). Du vil næsten med sikkerhed få et bedre resultat med en bedre skaleringsrutine (eks. bicubic).
2) 1) bliver gjort værre af at din kilde er JPG, der er lossy - du kan med andre ord sagtens ende med at have fået fat på en pixel der ikke har ret meget at gøre med den farve du forventede.
3) Det fremgår ikke hvor du konverterer til JPG (så en mulighed er jo at du slet ikke gør det, og det altså er et BMP-billede du ender op med - det kunne forklare filstørrelsen), men der hvor du gør det, skal du nok tweake lidt på kvaliteten du fortæller JPG-encoderen at den skal bruge.
Avatar billede sholm Nybegynder
28. januar 2012 - 22:35 #3
Lukker
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