Erstellen Sie thumbnail .NET C# durch die Festlegung der Breite
Ich bin mit dem folgenden code in meine website, für die thumbnail-Erstellung:
string furl = "~/images/thumbs/" + matchString;
lBlogThumb.ImageUrl = GetThumbnailView(furl, 200, 200);
private string GetThumbnailView(string originalImagePath, int height, int width)
{
//Consider Image is stored at path like "ProductImage\\Product1.jpg"
//Now we have created one another folder ProductThumbnail to store thumbnail image of product.
//So let name of image be same, just change the FolderName while storing image.
string thumbnailImagePath = originalImagePath.Replace("thumbs", "thumbs2");
//If thumbnail Image is not available, generate it.
if (!System.IO.File.Exists(Server.MapPath(thumbnailImagePath)))
{
System.Drawing.Image imThumbnailImage;
System.Drawing.Image OriginalImage = System.Drawing.Image.FromFile(Server.MapPath(originalImagePath));
imThumbnailImage = OriginalImage.GetThumbnailImage(width, height,
new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
imThumbnailImage.Save(Server.MapPath(thumbnailImagePath), System.Drawing.Imaging.ImageFormat.Jpeg);
imThumbnailImage.Dispose();
OriginalImage.Dispose();
}
return thumbnailImagePath;
}
public bool ThumbnailCallback() { return false; }
Möchte ich ändern diesen code, und in der Lage sein, erstellen Sie eine Miniaturansicht der Festlegung der Breite NUR. Was ich im Sinn haben, ist eigentlich so etwas wie beschneiden/Größenänderung Bild, mit einer festen Breite, die Aufrechterhaltung es-Verhältnis. Ist das möglich;
- Ist es das, was Sie wollen? newHeight = oldHeight * newWidth / oldWidth, nicht sicher, was Sie meinen, wenn Sie sagen, Sie wollen, um das Bild zu beschneiden - tun Sie zuschneiden möchten, UND ändern Sie die Größe?
- danke für Eure Hilfe
- idk warum, aber diese für mich ein "out of memory" äh.. gibt es überhaupt jemand der können legen Sie eine Ausnahme für diese? Ich weiß wirklich nicht, wie C# mit Speicher umgeht.
- Dies ist mehrere Jahre alt jetzt, aber du hast den Fehler wahrscheinlich nicht, weil Sie müssen gegossen
int
s (Image.Height
undImage.Width
) zu einem der floating-point-Typen. Ich empfehledecimal
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wir haben originalWidth=die original-Breite des Bildes und thumbWidth. Sie können wählen Sie einfach die thumbWidth) auf den gewünschten Wert, und berechnen Sie die
thumbHeigth=originalHeigth*thumbWidth/originalWidth
Die Sie erwähnen, skalieren und beschneiden. Wenn Sie möchten, dass die thumbnail-Höhen variieren mit einer festen Breite, die Antworten, die bereits für Sie arbeiten.
Die Erwähnung der Beschneidung macht mich denken, dass Sie möchten, eine Feste Größe der Miniaturansicht, mit der Breite gefüllt und alle überlaufen senkrechte Teil abgeschnitten. Wenn das der Fall ist, werden Sie brauchen, um zu tun, ein bisschen mehr Arbeit. Ich brauchte etwas ähnliches vor kurzem, und dies ist, was ich kam mit.
Dadurch wird eine Miniatur des original Größe und abgeschnitten in einer Weise, dass die Quelle Bild komplett füllt das Ziel-thumbnail cropping keine überlauf. Es wird keine Grenzen innerhalb der Miniaturansicht, auch wenn das original und Miniatur-Seitenverhältnisse unterschiedlich sind.
Zur Verwendung mit Ihrem code, den Sie ersetzen könnte Ihr Aufruf
OriginalImage.GetThumbnailImage
mit diesem:Beachten Sie, dass für portrait Bilder, dieser code wird tatsächlich verschieben der Miniaturansicht der viewport etwas höher auf dem original Bild. Dies wurde getan, so dass portrait-Aufnahmen von Menschen nicht das Ergebnis im headless torsos, wenn die thumbnails erstellt wurden. Wenn Sie nicht möchten, dass die Logik, entfernen Sie einfach die
if
block nach der "Porträt-Modus" Kommentar.Ich krank von wird dazu benötigt und erstellt eine lib, die macht das einfach: Link Zur Dokumentation & Download
Ein Grundsätzliches Beispiel ohne Rundung mit einer thumbnail-Breite von 140, unterhalb des 'Datei' ist ein HttpPostedFile hochgeladen von eine ASP.Net FileUpload-Steuerelement, das HttpPostedFile stellt eine stream.