Bilder Resourcenschonend verkleinern

07/09/2010 - 16:00 von Ulf [Kado] Kadner | Report spam
Servus!

Hat jemand eine Idee wie man ein Bild verkleinern kann ohne jedesmal
erst über:

Image img = Image.FromFile(sourceFile);
Bitmap resized = new Bitmap(img, newWidth, newHeight);
foreach (PropertyItem item in img.PropertyItems)
resized.SetPropertyItem(item);
resized.Save(targetFile, img.Format);
img.Dispose();
resized.Dispose();

zu gehen?

Problem an der Sache ist, das das bei bis zu 500 JPGs a 5-15MB
Bilddateigröße einfachmal zu lange dauert.

Wo könnte man hier optimieren? Ideen?

MfG, Ulf

Der beste Platz für Politiker ist das Wahlplakat. Dort ist er
tragbar, geràuschlos und leicht zu entfernen. [Loriot]
 

Lesen sie die antworten

#1 Thomas Scheidegger
07/09/2010 - 16:57 | Warnen spam
Hallo Ulf

Image img = Image.FromFile(sourceFile);
Bitmap resized = new Bitmap(img, newWidth, newHeight);
foreach (PropertyItem item in img.PropertyItems)
resized.SetPropertyItem(item);
resized.Save(targetFile, img.Format);
Problem an der Sache ist, das das bei bis zu 500 JPGs a 5-15MB
Bilddateigröße einfachmal zu lange dauert.
Wo könnte man hier optimieren? Ideen?




also JPGs sind ja schon mal von Natur aus 'ungünstig' für jede weitere
Bearbeitung.
Und GDI+ (Grafik-Lib welche .NET intern nutzt) ist auch kein HiSpeed-Wunder.

Ich würde als erstes mal ein Testlauf (über alle 500) ohne die innere
PropertyItem-Schleife machen,
bloss um zu sehen ob da nicht etwas 'klemmt' (mit bestimmten
Bildern/Props).

Dann kommt als nàchstes die Skalierung selber,
welche du mal expliziter und kontrollierter vornehmen könntest,
mit diversen Einstellungen wie des 'InterpolationMode' durchprobieren usw,
(ggf halt unter Qualitàts-Verlust)
etwa wie Bsp
Resizing a Photographic image with GDI+ for .NET
http://www.codeproject.com/KB/GDI-p...esize.aspx

Als letztes ist bei Save für JPGs auch wiederum ua ein
Qualitàts-Wert per 'EncoderParameters' anzugeben,
welcher Einfluss auf das codieren/komprimieren beim Speichern hat.
(ggf halt wieder unter Qualitàts-Verlust)
http://msdn.microsoft.com/en-us/lib...ality.aspx

Nützlich wàre auch ein 'Profiling' (Performance-Analyse)
mit entsprechenden Tools (bei grösseren Studio-Editionen dabei)

Aber vieles bleibt von deiner Bildersammlung, dem Verkleinerungsfaktor
sowie der Performance von GDI+abhàngig,
halt wenig aus .NET beeinflussbar.

Alternative wàre uU eine andere, native Imaging Library einzubinden.



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen