2011-06-14 148 views
0

ASP.NET MVC3調整圖像大小我想創建圖像的用戶配置文件。該用戶可以上傳他的照片,在他的個人資料中將會有這張照片,並且在論壇中會有從原始照片創建的小圖片。我沒有顯示圖像的問題,但調整大小。我有這樣的代碼在哪裏控制器用戶可以更改自己的信息(姓名,年齡,...),並可以上傳照片:用戶配置文件

[HttpPost, ValidateInput(false)] 
public ActionResult Upravit(int id, FormCollection collection, HttpPostedFileBase file) 
{ 
    try 
    { 
     var user = repo.Retrieve(id); 

     if (TryUpdateModel(user)) 
     { 
      if (file.ContentLength > 0) 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       var path = Path.Combine(Server.MapPath("~/Fotky/Profilove/"), (user.Name.Name + " " + user.Name.Surname + Path.GetExtension(fileName))); 
       file.SaveAs(path); 
       user.ImagePath = "/Fotky/Profilove/" + user.Name.Name + " " + user.Name.Surname + Path.GetExtension(fileName); 

      } 
      repo.Save(user); 
      return RedirectToAction("Index"); 
     } 
     return View(); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

和我的看法是這樣的:

@using (Html.BeginForm("Upravit", "Uzivatel", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>User</legend> 
     @Html.HiddenFor(model => model.UserID) 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserName) 
      @Html.ValidationMessageFor(model => model.UserName) 
     </div> 
     . 
     . 
     <input type="file" name="file" id="file" /> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

正如我所說的我只需要幫助添加代碼到控制器從原始創建小圖像並將其保存到。感謝您的幫助

+3

有[此處樣品縮略代碼(http://code.msdn.microsoft.com/Windows-Azure-Thumbnails-c001c8d7/sourcecode?fileId=21322&pathId=2130738076)。那你在追求什麼? – 2011-06-14 13:39:42

+0

有並行線程的答案可能是你的興趣:http://stackoverflow.com/a/10420210/1716421您可以使用WebImage類從「System.Web.Helpers」命名空間調整時,節省您的時間和精力,裁剪,旋轉你的圖像。希望有幫助 – 2012-10-13 17:02:17

回答

1

還有像在C#中的例子極大數在那裏重新調整圖片大小的。所以只需選擇一種你喜歡的方法。例如,以@Craig Stuntz作爲您的問題評論的鏈接。如果您不喜歡這種方法,請選擇another one並進行調整。

if (file != null && file.ContentLength > 0) 
{ 
    var fileName = Path.GetFileName(file.FileName); 
    // TODO: adjust the filenames here 
    var path = Path.Combine(Server.MapPath("~/"), fileName); 
    using (var input = new Bitmap(file.InputStream)) 
    { 
     int width; 
     int height; 
     if (input.Width > input.Height) 
     { 
      width = 128; 
      height = 128 * input.Height/input.Width; 
     } 
     else 
     { 
      height = 128; 
      width = 128 * input.Width/input.Height; 
     } 
     using (var thumb = new Bitmap(width, height)) 
     using (var graphic = Graphics.FromImage(thumb)) 
     { 
      graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
      graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
      graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 

      graphic.DrawImage(input, 0, 0, width, height); 
      using (var output = System.IO.File.Create(path)) 
      { 
       thumb.Save(output, System.Drawing.Imaging.ImageFormat.Jpeg); 
      } 
     } 
    } 
} 
+0

我不確定如何將這些代碼與我的文件變量一起使用,現在我知道謝謝你們兩個。 – 2011-06-14 14:06:47

+0

除非你設置的質量參數編碼器你會得到相當巨大的JPEG ...... 90是最好的,雖然80/85大概爲縮略圖可以接受的。 – 2012-03-27 15:19:22