2015-06-17 6 views
1

Мне нужно загрузить несколько изображений на сервер, но перед загрузкой они должны быть сжаты на стороне клиента без потери качества (с использованием jQuery).Множественное сжатие изображения без потери качества перед загрузкой

Есть ли способ получить ширину и высоту каждого изображения?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#Upload").click(function() { 
      var formData = new FormData(); 
      var image = new Image(); 
      var totalFiles = document.getElementById("fileUpload").files.length; 

      for (var i = 0; i < totalFiles; i++) { 
       var file = document.getElementById("fileUpload").files[i]; 
       formData.append("fileUpload", file); 
      } 

      $.ajax({ 
       type: "POST", 
       url: '/Ajaximage/Upload', 
       data: formData, 

       dataType: 'json', 
       contentType: false, 
       processData: false, 
       success: function(response) { 
        //alert('succes!!'); 
       }, 
       error: function(error) { 
        //alert("Failed"); 
       } 
      }); 
     }); 
    }); 
</script> 
+0

Параметр 'ajax' запрос, который загружает изображение находится на сервер не так ли? Либо пользователь делает сжатие без потерь на своем собственном компьютере, либо вы позволяете сценарию загрузки делать это. – tvgemert

+0

Пожалуйста, не добавляйте имена библиотек или языков в заголовок. Они не требуются, потому что они являются частью списка тегов. Кроме того, перед отправкой форматируйте код лучше (например, правильные отступы, вырезание ненужных разрывов строк и т. Д.). Улучшенный форматированный код помогает читабельности. Я немного изменил содержание, чтобы лучше объяснить ваш вопрос. Придя к коду, вы пробовали что-то конкретное для сжатия изображения? Это дало вам какие-то ошибки? Если да, укажите соответствующее сообщение об ошибке. – Harry

ответ

0

после получения файла в веб-службе, которую вы вызываете с помощью ajax. Приведите его в объект System.Drawing.Image. вы можете получить высоту и ширину изображения, используя свойства Height и Width, если Object.Drawing.Image Object.

По сжатия я думаю, что вы имеете в виду изменение размера изображения Попробуйте эту функцию

public System.Drawing.Image resizeImage(System.Drawing.Image imgToResize,int Width,int Height) 
    { 



     int sourceWidth = imgToResize.Width; 
     int sourceHeight = imgToResize.Height; 

     float nPercent = 0; 
     float nPercentW = 0; 
     float nPercentH = 0; 

     nPercentW = ((float)Width/(float)sourceWidth); 
     nPercentH = ((float)Height/(float)sourceHeight); 

     if (nPercentH < nPercentW) 
      nPercent = nPercentH; 
     else 
      nPercent = nPercentW; 

     int destWidth = (int)(sourceWidth * nPercent); 
     int destHeight = (int)(sourceHeight * nPercent); 

     Bitmap b = new Bitmap(destWidth, destHeight); 
     Graphics g = Graphics.FromImage((System.Drawing.Image)b); 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

     g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
     g.Dispose(); 

     return (System.Drawing.Image)b; 
    } 

будет небольшая потеря качества, но соотношение сторон будет поддерживаться

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