2016-06-14 9 views
1

Ich benutze diese:Wie ein Gif, um die Größe, ohne Qualität in C# zu verlieren

using (var image = Image.FromFile(txtSource.Text)) 
    using (var newImage = 
       resize_percentage(image,Convert.ToInt32(percentageValue.Text))) 
    {newImage.Save(txtPathDirectory.Text + "\\" + fileName, ImageFormat.Gif);} 

seine korrekte, aber wenn ich es benutze ich verlieren die Qualität.

+0

Machen Sie es _bigger_ oder _smaller_? Wenn Sie es verkleinern, verlieren Sie die Auflösung. Wenn Sie es größer machen, müssen Sie eine Art von Interpolation verwenden, um die Lücken zu füllen. –

+4

Jede Manipulation führt zu Qualitätsverlusten. Es gibt verschiedene Größenänderungsalgorithmen, und welcher zu verwenden ist, hängt wirklich vom Inhalt ab. Sie werden jedoch immer Qualität verlieren, wenn Sie die Größe des Bildes ändern. –

+1

Gerade bei einem primitiven Dateiformat wie Gif reichen 256 Farben nicht aus, um die Interpolationsartefakte zu glätten. Höchste Zeit, es in Rente zu gehen, stattdessen Png verwenden. –

Antwort

1

installieren Magick.NET über NuGet kann Lizenz hier:
https://magick.codeplex.com/license

Beispielcode:

var newWidth = 100; 
using (var collection = new MagickImageCollection(new FileInfo(@"C:\test.gif"))) 
{ 
    collection.Coalesce(); 
    foreach (var image in collection) 
    { 
     image.Resize(newWidth, 0); 
    } 
    collection.Write(@"c:\resized.gif"); 
} 

Aus meinen Tests funktioniert dies mit Alpha-Kanälen und unterschiedlichen Frameraten. RE Qualität, Kommentare geben gute Antworten.

+0

Ich glaube, Sie sollten die Art des inhärenten Qualitätsverlustes beim Skalieren/Interpolieren/... angesprochen haben ... Es gibt keine echte "verlustfreie Skalierung" ... –

Verwandte Themen