2015-05-14 2 views
0

Загрузка кода из файловой системы:Мое изображение не сжимая

System.Drawing.Image image = System.Drawing.Image.FromFile(<location of original image>););  

Загрузка кода из запроса браузера:

var memoryStream = new MemoryStream(); 
using (memoryStream) 
{ 
    System.Web.HttpContext.Current.Request.Files[upload].InputStream.CopyTo(memoryStream); 
    memoryStream.ToArray(); 
} 

byte[] bytes = memoryStream.GetBuffer();  

// Get the image from the server 
System.Drawing.Image image = new System.Drawing.Bitmap(System.Web.HttpContext.Current.Request.Files[upload].InputStream); 

Resize вызов изображения:

System.Drawing.Image image = this.ResizeImage(
    image, 
    originalImagePath, 
    ImageSizeType.Original, 
    null, 
    null) 

Сохранить изображение вызова:

image.Save(<location to save>); 

Код, который не сжимает изображение:

private System.Drawing.Image ResizeImage(System.Drawing.Image image, string filePath, string sizeType, int? _width, int? height) 
{ 
    ... 
    System.Drawing.Bitmap b = new System.Drawing.Bitmap(width, resizeHeight); 
    b.SetResolution(72, 72); 
    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage((System.Drawing.Image)b); 
    g.CompositingQuality = CompositingQuality.HighSpeed; 
    //g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    g.InterpolationMode = InterpolationMode.Low; 
    g.SmoothingMode = SmoothingMode.HighSpeed; 
    g.DrawImage(image, 0, 0, width, resizeHeight); 
    g.Dispose(); 
    return (System.Drawing.Image)b; 
} 

Независимо от того, что я делаю на это изображение, когда она спасает, она экономит на действительно высокий kb.

Например ... JPG 1024 х 768 @ 300Кб становится 600 х 400 @ 800KB

Что я делаю не так?

+2

Каковы первоначальные и измененные размеры форматов файлов? Вы не показываете код загрузки/сохранения. – GazTheDestroyer

+0

В каком формате вы сохраняете файл? – Magnus

+0

png, gif, jpg ... все действительно. независимо от того, какой пользователь загружает – Jimmyt1988

ответ

1

Как Magnus правильно сказал, рисунок на холсте не имеет никакого значения для размера файла ... ...

Это было сохранить файл часть, которая является все нуб ... Это то, что он должен be:

private ImageCodecInfo GetEncoderInfo(string mimeType) 
    { 
     // Get image codecs for all image formats 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 

     // Find the correct image codec 
     for (int i = 0; i < codecs.Length; i++) 
      if (codecs[i].MimeType == mimeType) 
       return codecs[i]; 
     return null; 
    } 


... 
if(mimeType.ToLower() == "image/jpeg") 
{ 
    ImageCodecInfo jpgEncoder = this.GetEncoderInfo("image/jpeg") 

    System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; 

    EncoderParameters myEncoderParameters = new EncoderParameters(1); 
    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 80L); 
    myEncoderParameters.Param[0] = myEncoderParameter; 

    image.Save(systemFilePath, jpgEncoder, myEncoderParameters); 
} 
else 
{ 
    image.Save(systemFilePath); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^