2

大家好我是的WebAPI的工作,我需要上传到destination folder之前优化从文件夹这里我不得不Uploaded images into one folder图像我需要降低总图像的image size in KB我在这里优化single image in to 3 different sizes' (large, thumbnail,medium)' but image sizes are increased并保存在一个文件夹 在现在的我需要优化这些图像可能你需要帮助我 我怎么能这样做。其实我是webapi的新手。 任何机构可以有任何想法,请帮助我,但有一点我需要做的this manually 三江源提前如何在webapi中手动优化文件夹中的多个图像(减小文件大小)?

这是我的控制器

public Task<HttpResponseMessage> Post() 
     { 
      if (!Request.Content.IsMimeMultipartContent("form-data")) 
      { 
       throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
      } 

      var uploadFolder = HostingEnvironment.MapPath("~/App_Sprites/UploadFolder"); 
      uploadFolder = Path.Combine(uploadFolder, DateTime.Now.ToString("yyyyMMddhhmmssfff")); 
      Directory.CreateDirectory(uploadFolder); 
      var streamProvider = new PreserveFilenameMultipartFileStreamProvider(uploadFolder); 

      return Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => 
      { 
       foreach (var uploadedFile in Directory.GetFiles(uploadFolder)) 
       { 
        var thumbnail = Path.Combine(uploadFolder, "thumb-" + Path.GetFileName(uploadedFile)); 
        var medium = Path.Combine(uploadFolder, "medium-" + Path.GetFileName(uploadedFile)); 
        var large = Path.Combine(uploadFolder, "large-" + Path.GetFileName(uploadedFile)); 
        ImageTools.Resize(uploadedFile, thumbnail, 80, 80); 
        ImageTools.Resize(uploadedFile, medium, 48, 48); 
        ImageTools.Resize(uploadedFile, large, 128, 128); 
       } 
       return Request.CreateResponse(HttpStatusCode.Accepted); 
      }); 
     } 
    } 

ABD这是我的类文件

public class ImageTools 
    { 
     public static void Resize(string original, string output, int width, int height) 
     { 
      using (var image = Image.FromFile(original)) 
      using (var thumbnail = new Bitmap(width, height)) 
      using (var graphics = Graphics.FromImage(thumbnail)) 
      { 
       graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
       graphics.SmoothingMode = SmoothingMode.HighQuality; 
       graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
       graphics.CompositingQuality = CompositingQuality.HighQuality; 

       graphics.DrawImage(image, 0, 0, width, height); 

       ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders(); 
       EncoderParameters encoderParameters; 
       encoderParameters = new EncoderParameters(1); 
       encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L); 
       thumbnail.Save(output, info[1], encoderParameters); 
      } 
     } 
    } 

类文件

public class PreserveFilenameMultipartFileStreamProvider : MultipartFileStreamProvider 
     { 
      public PreserveFilenameMultipartFileStreamProvider(string rootPath) 
       : base(rootPath) 
      { 
      } 

      public override string GetLocalFileName(HttpContentHeaders headers) 
      { 
       return headers.ContentDisposition.FileName.Replace("\"", ""); 
      } 
     } 

这是我的布局页

@using (Html.BeginRouteForm("DefaultApi", new { httproute = "", controller = "Upload" }, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="image" multiple="multiple" accept="image/*" /> 
    <button type="submit">Upload</button> 
} 

我已经创建了一个文件夹现在的图像保存在文件夹中,但在KB文件大小增加,但我们必须减少plz帮助我

+0

您可以编辑您的文章一点 - 目前还不清楚什么似乎是问题 - 正在调整图像大小以增加字节大小?如果是这样 - 请提供一些示例,例如您使用哪些库来调整大小,以及如何使用它们。我不相信这与webAPI有什么关系。 – veljkoz

+0

我已经更新PLZ看我的代码PLZ帮我做这个工作 –

回答

3

您应该添加一个参数给你调整质量水平的方法并使用此参数更改不同的渲染。

您正在调整您的图像的质量设置为完整,这不是很有效。

你应该尝试指定其他文件格式,我不知道你正在使用的一个,但。PNG的小图片和.JPG更大的应该有所帮助。 (.GIF太多,如果你真的很需要那额外的字节

一些图像处理应该用图像之前完成,但我猜你真的没有选择这里。

2

如上你的问题小的变化需要尝试这一个只是调用你的控制器这个文件我希望它西港岛线帮助ü

public class ImageDecrease 
     { 
      public static void Resize(Stream original, string output, int width, int height) 
      { 
       using (var image = Image.FromStream(original)) 
       using (var thumbnail = new Bitmap(width, height)) 
       using (var graphics = Graphics.FromImage(thumbnail)) 
       { 
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
        graphics.SmoothingMode = SmoothingMode.HighQuality; 
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
        graphics.CompositingQuality = CompositingQuality.HighQuality; 

        graphics.DrawImage(image, 0, 0, width, height); 

        ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders(); 
        EncoderParameters encoderParameters; 
        encoderParameters = new EncoderParameters(1); 
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L); 
        thumbnail.Save(output, info[1], encoderParameters); 
       } 
      } 
     } 
相关问题