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.
Ich schlage Magick.NET vor :
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;
}