2017-02-22 5 views
0

Ich möchte das Bild im laufenden Betrieb in C# beschneiden.Bild beschneiden oder verkleinern mit C#

Ich habe einige Links verwiesen und implementieren wie folgt.

Referenz:

Aber ich bin mit dem Bild geringer Qualität zu bekommen. Ich habe gesehen, Website, die sie das Bild auf ihrem Server hochladen und verkleinern die Website ohne Qualitätsverlust

Wie haben sie gemacht? Warum können wir nicht in C# tun?

CODE

public static Image ScaleImage(Image image, int width, int height) 
     { 
      if (image.Height < height && image.Width < width) return image; 
      using (image) 
      { 
       double xRatio = (double)image.Width/width; 
       double yRatio = (double)image.Height/height; 
       double ratio = Math.Max(xRatio, yRatio); 
       int nnx = (int)Math.Floor(image.Width/xRatio); 
       int nny = (int)Math.Floor(image.Height/yRatio); 
       Bitmap resizedImage = new Bitmap(nnx, nny, PixelFormat.Format64bppArgb); 
       using (Graphics graphics = Graphics.FromImage(resizedImage)) 
       { 
        graphics.Clear(Color.Transparent); 

        // This is said to give best quality when resizing images 
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
        graphics.SmoothingMode = SmoothingMode.HighQuality; 
        graphics.CompositingQuality = CompositingQuality.HighQuality; 
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 

        graphics.DrawImage(image, 
         new Rectangle(0, 0, nnx, nny), 
         new Rectangle(0, 0, image.Width, image.Height), 
         GraphicsUnit.Pixel); 
       } 
       return resizedImage; 
      } 
     } 
+0

Ich hatte dieses Problem in der Vergangenheit und löste es, aber ich kann mich nicht erinnern, wie ATM und ich bei der Arbeit sind. Ich möchte irgendwie sagen, dass du es in JPEG umwandeln kannst, es verkleinern und dann zurück zur Bitmap, weil ich denke, dass die Skalierung der Bitmap nicht so gut ist ... Ich bin mir nicht sicher, ob ich es auch gemacht habe, aber es fühlt sich an wie etwas Ich tat. Es ist Jahre her ... Ich werde mich darum kümmern, wenn Sie das nicht testen und sehen, das hilft. –

+0

Mögliches Duplikat von [Größe eines Bild C# ändern] (http://stackoverflow.com/questions/1922040/resize-an-image-c-sharp) – Nino

+0

Zuschneiden sollte Qualität nicht verlieren. Wenn Sie es verkleinern, werden Sie immer Informationen verlieren. Stellen Sie sicher, dass die Einstellung __same dpi__ für beide Bilder gilt. - Siehe [hier für ein ähnliches Problem] (http://stackoverflow.com/questions/26612057/where-does-this-quality-loss-on-images-come-from/26614735?s=6|0.0626#26614735) . Beachten Sie den zweiten Teil! - Auch [siehe hier über Ihr Pixelformat] (http://stackoverflow.com/questions/34590509/pixelformat-format32bppargb-vs-pixelformat-format64bppargb) – TaW

Antwort

0

Sie dafür verwenden ImageMagick können. Es hat seine eigene DLL, um mit VS zu arbeiten. Es hat auch ein tolles Forum, wo Sie alle Arten von Beispielen finden können. Ich habe dafür ein Programm gemacht. es dauerte etwa eine halbe Stunde (nicht wirklich eine große Anwendung, es wird nur für eine kommerzielle Firma verwendet, um viele beschnittene Bilder in Größe zu machen (etwa 4 Terrabyte von Bildern lol)). Hier finden Sie einige Beispiele.

https://www.imagemagick.org/script/index.php

0

ImageMagick ist eine tragfähige Lösung auf jeden Fall und so ist GraphicsMagick oder libvips (Obwohl ich nicht sicher bin, ob libvips C# spezifische Bindungen hat, aber es ist a lot faster than IM or GM).

Sie können auch versuchen, ImageKit oder andere ähnliche voll funktionsfähige Bildoptimierungs- und Bereitstellungslösungen von Drittanbietern zu versuchen, diese Größenanpassung für Sie vorzunehmen.