112 Stimmen

Größenänderung eines Bildes ohne Qualitätsverlust

Wie kann ich die Größe eines Bildes ändern, ohne dass die Bildqualität beeinträchtigt wird?

0 Stimmen

Können Sie uns mehr Details nennen? Wie groß sind Ihre Bilder und in welcher Größe benötigen Sie sie?

5 Stimmen

6 Stimmen

bilder-grössen.net - Diese Bibliothek erzeugt die hochwertigsten Bilder, die man mit .NET bekommen kann

222voto

Kris Erickson Punkte 32932

Als rcar sagt, können Sie nicht ohne einige Qualität zu verlieren, das Beste, was Sie in c# tun können, ist:

Bitmap newImage = new Bitmap(newWidth, newHeight);
using (Graphics gr = Graphics.FromImage(newImage))
{
    gr.SmoothingMode = SmoothingMode.HighQuality;
    gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
    gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
    gr.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
}

3 Stimmen

Ich möchte noch hinzufügen, dass der Benutzer (wenn möglich) mit einem Bitmap-Bild beginnen sollte, das etwa doppelt so groß ist, wie es sein muss, und es dann verkleinern sollte. Das resultierende Bild sollte ziemlich glatt sein.

0 Stimmen

+1 für die Verkleinerung. nie nach oben, während Sie nach oben skalieren können, auch die Codierung einer unscharfen Maske wird nicht erhalten Sie ein gutes Ergebnis.

0 Stimmen

+1 Vielen Dank - das ist unglaublich hilfreich!

32voto

Randy Punkte 3912

Sofern Sie nicht mit Vektorgrafiken arbeiten, gibt es keine Möglichkeit, die Größe eines Bildes zu ändern, ohne dass die Bildqualität darunter leidet.

1 Stimmen

Es sei denn, du erweiterst sie...

0 Stimmen

Sie können ihn erweitern, ohne dass Informationen verloren gehen, aber es gibt verschiedene Arten von Filtern, die zu unterschiedlichen Ergebnissen führen - Null-Ordnung-Halten, Tiefpass usw.

0 Stimmen

Ich kann bestätigen, dass ich dramatisch "Verbessern!" zu meinem Computer gesagt habe und es hat nicht funktioniert.

26voto

ozba Punkte 6372
private static Image resizeImage(Image imgToResize, Size size)
{
    int sourceWidth = imgToResize.Width;
    int sourceHeight = imgToResize.Height;

    float nPercent = 0;
    float nPercentW = 0;
    float nPercentH = 0;

    nPercentW = ((float)size.Width / (float)sourceWidth);
    nPercentH = ((float)size.Height / (float)sourceHeight);

    if (nPercentH < nPercentW)
        nPercent = nPercentH;
    else
        nPercent = nPercentW;

    int destWidth = (int)(sourceWidth * nPercent);
    int destHeight = (int)(sourceHeight * nPercent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
    g.Dispose();

    return (Image)b;
}

von aquí

0 Stimmen

Das funktioniert, liefert aber die gleiche Qualität wie die Antwort von Kris Erickso. Trotzdem schön zu sehen, dass Size verwendet wird...

5voto

Ashlocke Punkte 1437

Ich glaube, was Sie suchen, ist "Resize/Resample" Ihre Bilder zu tun. Hier ist eine gute Website, die Anweisungen gibt und bietet ein Dienstprogramm Klasse (Das ich auch zufällig zu verwenden):

http://www.codeproject.com/KB/GDI-plus/imgresizoutperfgdiplus.aspx

3voto

AaronS Punkte 7389

Sie können die Größe eines Bildes nicht ohne Qualitätseinbußen ändern, einfach weil Sie die Anzahl der Pixel reduzieren.

Verringern Sie die Größe nicht auf der Client-Seite, da die Browser die Größe der Bilder nicht gut anpassen können.

Sie können die Größe programmatisch ändern, bevor Sie sie rendern oder wenn ein Benutzer sie hochlädt.

Hier ist ein Artikel, der eine Möglichkeit erklärt, dies in c# zu tun: http://www.codeproject.com/KB/GDI-plus/imageresize.aspx

0 Stimmen

"Browser sind nicht gut darin, die Größe von Bildern zu ändern" - das mag im Jahr '08 wahr gewesen sein, aber glücklicherweise sind wir in diesem Bereich jetzt meilenweit voraus (was zu einem großen Teil daran liegt, dass die alten IE-Versionen langsam verblassen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X