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); 
       } 
      } 
     } 
相關問題