2013-12-11 3 views
0

У меня есть вход для файла в asp.net. Я хочу получить изображение, отобразить миниатюру и сохранить его. Вот aspx ...Преобразование изображения в миниатюру и сохранение его

form id="form1" runat="server" enctype="multipart/form-data"> 
<div> 
    <input type="file" runat="server" /> 
    <br /> 
    <asp:Button runat="server" ID="btn_upload" OnClick="btn_upload_Click" Text="Upload" /> 
    <br /> 
    <asp:Image ID="image_placeholder" runat="server" Visible="false" /> 
</div> 
</form> 

И вот код C# позади. Я могу получить изображение для отображения, мне просто трудно сэкономить его.

var postedFile = httpRequest.Files[file]; 
      string fileName = postedFile.FileName; 

      if (fileName != "") 
      { 
       Stream fs = postedFile.InputStream; 

       System.Drawing.Image image = System.Drawing.Image.FromStream(fs); 

       using (System.Drawing.Image thumbnail = image.GetThumbnailImage(100, 100, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero)) 
       { 
        using (MemoryStream memoryStream = new MemoryStream()) 
        { 
         thumbnail.Save(memoryStream, ImageFormat.Png); 
         Byte[] bytes2 = new Byte[memoryStream.Length]; 
         memoryStream.Position = 0; 
         memoryStream.Read(bytes2, 0, (int)bytes2.Length); 
         string base64String = Convert.ToBase64String(bytes2, 0, bytes2.Length); 
         image_placeholder.ImageUrl = "data:image/png;base64," + base64String; 
         image_placeholder.Visible = true; 
         var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
         thumbnail.Save(desktopFolder, System.Drawing.Imaging.ImageFormat.Png); 
        } 
       } 

Ошибка я получаю «общая ошибка ocurred в GDI +» ли я считать, что это потому, что я звоню два thumbnail.Save

В любом случае, изображение отображается нормально, это просто проблематично, когда его на самом деле экономит его.

+1

Возможно, проблема связана с правами на сохранение вашей учетной записи сервера iis. – Carra

+0

Прямо сейчас я просто запускаю его из своей локальной среды разработчиков, пытаясь сохранить его на своем рабочем столе – prawn

ответ

0

Использование сторонней библиотеки здесь http://imageresizer.codeplex.com/. Я боролся с загрузкой изображений и сохранением качества, эта библиотека очень помогла мне.

На ваш взгляд:

@model YourProject.ViewModels.ProductImageUploadCreateViewModel 
@using (Html.BeginForm("Upload", "ProductImage", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="ImageFile1" id="ImageFile1"> 
} 

Ваш контроллер:

класс ProductImageController общественности: контроллер { [HttpPost] общественности ActionResult Загрузить (ProductImageUploadCreateViewModel ViewModel) { если (ModelState.IsValid) { возвращение Вид (viewModel); }

 if (viewModel.ImageFile1 != null) 
     { 
      UploadImage(viewModel.ProductId, "1", viewModel.ImageFile1); 
     } 

     // Return to where ever... 
} 

} Ваш метод загрузки:

частное аннулируются UploadImage (INT PRODUCTID, строка imageNo, HttpPostedFileBase ImageFile) { строка uploadPath = Server.MapPath ("~/Активы/Изображения/Продукты/"+ productId); if (! Directory.Exists (uploadPath)) { Directory.CreateDirectory (uploadPath); }

Dictionary<string, string> versions = new Dictionary<string, string>(); 
versions.Add("_m", "width=150&height=150&scale=both&format=jpg"); // Medium size 

string filePrefix = productId + "_" + imageNo; 
versions.Add("_s", "width=90&height=90&scale=both&format=jpg"); // Small size 
versions.Add("_l", "width=300&height=300&scale=both&format=jpg"); // Large size 

foreach (string fileSuffix in versions.Keys) 
{ 
     // Generate a filename 
     string fileName = Path.Combine(uploadPath, filePrefix + fileSuffix); 

     // Let the image builder add the correct extension based on the output file type 
     fileName = ImageBuilder.Current.Build(imageFile, fileName, new ResizeSettings(versions[fileSuffix]), false, true); 
} 

} Посмотрите на их сайте, есть несколько образцов, которые вы можете работать через. Надеюсь, это поможет :)

1

Мне недавно пришлось написать небольшое приложение для создания миниатюр из файлов PDF. Я закончил использование библиотеки на основе ImageMagick под названием Magick.NET. Эта библиотека очень упростила то, что вы описываете. Я использовал метод MagickImage.Resize(), чтобы изменить размер изображения до размера миниатюры, свойство MagickImage.Format, чтобы установить формат изображения миниатюры, а также метод MagickImage.Write(), чтобы записать миниатюру на диск. Вы можете проверить его на https://magick.codeplex.com/.

Смежные вопросы