2009-08-19 4 views

Antwort

0

Bilder Ändern der Größe ist einfach genug, um keine API zu benötigen. Ich habe meine eigene für diese Aufgabe geschrieben. Hier ist ein bisschen, wenn Code, um Sie auf diesen Pfad zu starten.

// get original image 
System.Drawing.Image orignalImage = Image.FromFile(originalPath); 
// create a new image at the desired size 
System.Drawing.Bitmap newImage = new Bitmap(450, 338); 
// create grpahics object to draw with 
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(newImage); 
//draw the new image 
g.DrawImage(orignalImage, r); 
// save the new image  
newImage.Save(System.IO.Path.Combine(OUTPUT_FOLDER_PATH , ImageName.Replace(" ", ""))); 
+0

Danke David. Ich habe auch einen ähnlichen Code für die Bildgrößenanpassung (w/aspect ratio) geschrieben. Das Problem, vor dem ich stehe, ist, wenn ich Größe sagen will - ein Bild von 160px um 110px zu 48px um 48px. Das Ergebnis ist nicht gut. Ich bin mir nicht sicher, ob es eine Lösung gibt, aber ich dachte, ein Drittanbieter hätte dieses Problem gelöst. Danke. –

+0

System.Drawing.Image ist eine API –

+1

Um Ihr Problem zu beheben, sollten Sie herausfinden, welche Dimension Ihres Bildes größer ist und skalieren und zuschneiden. System.Drawing bietet: D –

0

Ich werde dies als eine Alternative zu den anderen Antworten zur Verfügung stellen. Image Magick ist eine sehr leistungsfähige und ausgereifte Bildverarbeitungsbibliothek, die Sie von .net verwenden können. Ich hatte viel Erfolg damit.

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

+0

.net-Bibliothek wird nicht mehr entwickelt. Es gibt keinen Punkt, außer Sie wissen, wie man p/invoke –

1

Hier ist, was ich benutze:

internal static System.Drawing.Image FixedSize(System.Drawing.Image imgPhoto, int Width, int Height) 
{ 
    int sourceWidth = Convert.ToInt32(imgPhoto.Width); 
    int sourceHeight = Convert.ToInt32(imgPhoto.Height); 
    int sourceX = 0; 
    int sourceY = 0; 
    int destX = 0; 
    int destY = 0; 

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

    nPercentW = ((float)Width/(float)sourceWidth); 
    nPercentH = ((float)Height/(float)sourceHeight); 
    if (nPercentH < nPercentW) 
    { 
     nPercent = nPercentH; 
     destX = System.Convert.ToInt16((Width - 
      (sourceWidth * nPercent))/2); 
    } 
    else 
    { 
     nPercent = nPercentW; 
     destY = System.Convert.ToInt16((Height - 
      (sourceHeight * nPercent))/2); 
    } 

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

    Bitmap bmPhoto = new Bitmap(Width, Height, 
     PixelFormat.Format24bppRgb); 
    bmPhoto.SetResolution(imgPhoto.HorizontalResolution, 
     imgPhoto.VerticalResolution); 

    Graphics grPhoto = Graphics.FromImage(bmPhoto); 
    grPhoto.Clear(Color.Black); 
    grPhoto.InterpolationMode = 
     InterpolationMode.HighQualityBicubic; 

    grPhoto.DrawImage(imgPhoto, 
     new Rectangle(destX, destY, destWidth, destHeight), 
     new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight), 
     GraphicsUnit.Pixel); 

    grPhoto.Dispose(); 
    return bmPhoto; 
} 

Verwendung ist ziemlich einfach:

System.Drawing.Image orignalImage = Image.FromFile(filePath); 
System.Drawing.Image resizedImage = FixedSize(originalImage, 640, 480); 
+0

Excellent! Ich werde es versuchen. –

+1

Auch Leute überprüfen diese Seite aus: http://nathanaeljones.com/products/asp-net-image-resizer/ –

+0

Ich habe seine Software schon einmal gesehen. Es ist besser, Bilder beim Veröffentlichen von Inhalten auszugeben. DDOS-Angriffe verhindern. –

2

Die ImageResizer Bibliothek wird aktiv entwickelt, gepflegt und unterstützt (seit 2007). Es ist auf dem neuesten Stand mit den neuesten Leistungstechniken, Funktionen und verfügt über eine einfache API. Es ist sicher, sicher, zuverlässig und versorgt Hunderte kommerzieller Websites.

Es ist kompatibel mit ASP.NET 2.0 bis 4.0, MVC, und ausgelegt ist extrem schnell zu sein mit IIS 7.