2011-08-24 302 views
0

我使用Silverlight和http://imagetools.codeplex.com/構建文件上傳器。Silverlight調整圖像大小和最終文件大小

它的一切都好,但我的最終文件是約300KB(大小)與400×300(分辨率)。

當我在MS Paint上打開它並將它另存爲jpg時,尺寸設置爲正常。

我的懷疑是de enconde o文件是(png)但我現在不怎麼樣。

我的代碼:

 public static byte[] resize(string extension,int width,int height,int orientation) 
    { 
     //Decoders.AddDecoder<BmpDecoder>(); 
     //Decoders.AddDecoder<PngDecoder>(); 
     Decoders.AddDecoder<JpegDecoder>(); 
     //Decoders.AddDecoder<GifDecoder>(); 

     var newImg = new ExtendedImage(); 
     if (orientation == 0) 
      newImg = ExtendedImage.Resize(img, width, height, new ImageTools.Filtering.NearestNeighborResizer()); 
     else 
      newImg = ExtendedImage.Resize(img, height, width, new ImageTools.Filtering.NearestNeighborResizer()); 


     //newImg = applyWaterMark(newImg); 
     //var s = new MemoryStream(); 
     var s = newImg.ToStreamByExtension(extension); 
     return ReadFully(s); 
    } 
+1

ImageTools用於jpeg編碼的默認質量爲100%。如果您以該質量從繪畫程序中保存該文件,是否還有很大的區別?什麼是「正常」尺寸?另外,我認爲你的AddDecoder調用應該是靜態構造函數,所以它們只添加一次,每次調用方法時都不會調用它。 – hatchet

+1

解決了! var e = new ImageTools.IO.Jpeg.JpegEncoder(); var s = new MemoryStream(); e.Quality = 90; e.Encode(newImg,s); // var s = newImg.ToStream(); return s.GetBuffer(); – JoeLoco

+0

請將您的解決方案作爲本問題的答案。 – AnthonyWJones

回答

0

解決!

var e = new ImageTools.IO.Jpeg.JpegEncoder(); 
var s = new MemoryStream(); e.Quality = 90; 
e.Encode(newImg,s); 
//var s = newImg.ToStream(); 
return s.GetBuffer();