2013-12-11 58 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); 
        } 
       } 

我得到的错误是 “在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视图模型) { 如果(ModelState.IsValid ) { return View(viewModel); }

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

     // Return to where ever... 
} 

} 您的上传方式:

私人无效UploadImage(INT的productId,串imageNo,HttpPostedFileBase镜像文件) { 串uploadPath =使用Server.Mappath(“〜/资产/图像/产品/“+ productId);如果(!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/

相关问题