21. november 2007 - 11:06Der 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?
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
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);
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.
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.