Kostenlose Open-Source-C#-Image-Größenänderung und Optimierungsbibliothek

Ich möchte eine C#-Bibliothek dafür, die Open Source und kostenlos ist.

Ich möchte, dass diese Bibliothek eine Optimierung oder Thumbnail-Erstellung basierend auf echten Standardalgorithmen durchführt.

Wenn es eine Reihe bekannter Erweiterungen wie jpg, bmp, gif, png, svg und tiff unterstützt, würde ich das begrüßen.

Antworten (2)

Ich schlage Magick.NET vor :

  • unterstützt über 100 wichtige Dateiformate
  • Open Source
  • In Verbindung mit ImageMagick, der Referenz in diesem Bereich, werden die meisten Bildtransformationen (Miniaturansichten, Optimierungen) im Web von ImageMagick unterstützt
  • Beispieloperationen: Größe ändern, konvertieren, kombinieren, Wasserzeichen, kolorieren, Text und Form zeichnen, EXIF
  • Bei Bedarf verlustfreie Komprimierung

Logo

Beispielcode zum Ändern der Größe eines Bildes:

// Read from file
using (MagickImage image = new MagickImage("input.jpg"))
{
    MagickGeometry size = new MagickGeometry(100, 100);

    // Resize the image to a fixed size without maintaining the aspect ratio.
    // Normally an image will be resized to fit inside the specified size.
    size.IgnoreAspectRatio = true;

    image.Resize(size);

    // Save the result
    image.Write("output_100x100.png");
}

Sie können diese Funktion für Miniaturansichten und andere verwenden, um diese Funktion für das ursprüngliche Seitenverhältnis zu verwenden. Sie können Bitmap zurückgeben, aber (Bild) vor der Rückgabefunktion und vor dem Funktionsnamen löschen.

public static Image ResizeImageOriginalRatio(Image image, int width, int height)
    {

        int oraginal_Height = image.Height;
        int oraginal_width = image.Width;
        int percent_Height = oraginal_Height/height;
        int percent_Width = oraginal_width/width;

        if ((oraginal_width / oraginal_Height) >= 1)
        {
            //Portrait
            width = oraginal_width / percent_Width;
        }
        else {
            //Landscape
            height = oraginal_Height / percent_Height;
        }

        var destRect = new Rectangle(0, 0, width, height);
        var destImage = new Bitmap(width, height);

        destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

        using (var graphics = Graphics.FromImage(destImage))
        {
            graphics.CompositingMode = CompositingMode.SourceCopy;
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

            using (var wrapMode = new ImageAttributes())
            {
                wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
            }
        }

        return (Image)destImage;
    }