2012-08-13 33 views
1

可能重複:
How to generate square thumbnail of an image?如何將圖像保存爲縮略圖MVC3

我想我的圖像保存爲縮略圖。我怎樣才能做到這一點 ?

這裏是我的動作控制:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult banner_create(banner banner, HttpPostedFileBase file) 
{ 
    var fileName = Path.GetFileName(file.FileName); 
    var path = Path.Combine(Server.MapPath("~/banner_image/"), fileName); 
    var extension = Path.GetExtension(path); 
    file.SaveAs(path); 
    banner.banner_image_description = extension; 
    banner.banner_image_name = fileName; 
    if (ModelState.IsValid) 
    { 
     db.banner.AddObject(banner); 
     db.SaveChanges(); 
     return RedirectToAction("index"); 
    } 

    return View(banner); 
} 

回答

2

下面的代碼應該工作正常。 我已經添加了一些評論,所以你可以看到發生了什麼。

// First, we convert an HttpPostedFileBase to an Image 
// (Please note that you need to reference System.Drawing.dll) 
using (var image = Image.FromStream(httpPostedFileBase.InputStream, true, true)) 
{ 
    // Then we create a thumbnail. 
    // The simplest way is using Image.GetThumbnailImage: 
    using (var thumb = image.GetThumbnailImage(
     thumbWidth, 
     thumbHeight, 
     () => false, 
     IntPtr.Zero)) 
    { 
     // Finally, we encode and save the thumbnail. 
     var jpgInfo = ImageCodecInfo.GetImageEncoders() 
      .Where(codecInfo => codecInfo.MimeType == "image/jpeg").First(); 

     using (var encParams = new EncoderParameters(1)) 
     { 
      // Your output path 
      string outputPath = "..."; 
      // Image quality (should be in the range [0..100]) 
      long quality = 90; 
      encParams.Param[0] = new EncoderParameter(Encoder.Quality, quality); 
      thumb.Save(outputPath, jpgInfo, encParams); 
     } 
    } 
} 
0

這裏是C#函數,您可以使用它來調整圖像的大小任何你想要的方式。在你的特定情況下,使其成爲一定大小的縮略圖。 它需要System.Drawing.Imageint size希望其寬度爲並返回System.Drawing.Image。 現在,這個工作是肯定的,我在當前的項目中使用它,它很好地完成了這項工作。

public System.Drawing.Image ScaleBySize(System.Drawing.Image imgPhoto, int size) 
{ 
    var logoSize = size; 

    float sourceWidth = imgPhoto.Width; 
    float sourceHeight = imgPhoto.Height; 
    float destHeight; 
    float destWidth; 
    const int sourceX = 0; 
    const int sourceY = 0; 
    const int destX = 0; 
    const int destY = 0; 

    // Resize Image to have the height = logoSize/2 or width = logoSize. 
    // Height is greater than width, set Height = logoSize and resize width accordingly 
    if (sourceWidth > (2 * sourceHeight)) 
    { 
    destWidth = logoSize; 
    destHeight = sourceHeight * logoSize/sourceWidth; 
    } 
    else 
    { 
    int h = logoSize/2; 
    destHeight = h; 
    destWidth = sourceWidth * h/sourceHeight; 
    } 
    // Width is greater than height, set Width = logoSize and resize height accordingly 

    var bmPhoto = new Bitmap((int)destWidth, (int)destHeight, PixelFormat.Format32bppPArgb); 
    bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution); 

     using (Graphics grPhoto = Graphics.FromImage(bmPhoto)) 
     { 
      grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      grPhoto.DrawImage(imgPhoto, 
        new Rectangle(destX, destY, (int)destWidth, (int)destHeight), 
        new Rectangle(sourceX, sourceY, (int)sourceWidth, (int)sourceHeight), 
        GraphicsUnit.Pixel); 
      grPhoto.Dispose(); 
     } 
    return bmPhoto; 
} 

希望這會幫助你。