2011-08-24 133 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();