Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.09.2015, 02:05
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Некорректно определяется ширина и высота изображения
В обработчике
$('#usrpfile').on("change", function() {
изменения элемента
<input id="usrpfile" type="file"
не всегда корректно определяется ширина и высота изображения. То верно, то неверно, искажая пропорции рисунка выводимого в соответствующем контейнере.

Для небольших файлов, например 37 Кб, возвращает габариты неверно, как бы не 'успевает' возвращать правильную ширину-realWidthPic и высоту-realHeightPic. Поэтому использовал сначала метод setTimeout, вроде заработало. Затем понадобилось на время определения ширины и высоты прятать рисунок, и вновь его отображать после установки подогнанных размеров.
Скрытие и отображение при этом стало работать ( с точки зрения корректного определения ширины и высота рисунка) и без setTimeout.
То есть проблема как бы решена, просто остались сомнения что какое-либо сочетание размеров файла и периода их обработки может вылезти боком.
Прошу подсказать обоснованы ли эти сомнения и верно ли в принципе такое решение?


$('#usrpfile').on("change", function(){     // #1, при изменении  <input id="usrpfile" type="file">
  file = this.files[0];   // Получаем файл из <input type="file") - элемент массива files[0]					

// вставка контейнеров, img и ссылки 'удалить' 
 $("<div class='occupiedImgCont'><div class='occupiedImg-wrapper'><img id='usrpPhoto' src='' /></div><div class ='clear'></div><div class='userpic-del'><a class='del_usrp' href='#'>Удалить фото</a></div></div>").insertBefore($('.emptyImgCont'));  
 
 uploadImage = $('#usrpPhoto');  // пустой объект <img id='usrpPhoto' 
 var oReaderUploadPic = new FileReader(); 	// объект FileReader   
 oReaderUploadPic.onload = (function() {	// #C	
  return function(e) {			// #B
  uploadImage.attr('src', e.target.result);
  uploadImage.hide();	// скрываем рис. на время определения его ширины и высоты
  // setTimeout (function(){	// отсрочка 10 мс
   realWidthPic  = uploadImage.width(); // ширина изображения (px) 
   realHeightPic = uploadImage.height(); // высота изображения (px)  
   ratioPic =  realWidthPic / realHeightPic;
   // ширина и высота контейнера изображения 
   var imgContWidth  = $('.occupiedImg-wrapper').width()-6,            	
        imgContHeight = $('.occupiedImg-wrapper').height()-6; 		
   
   // Подгонка размера загруженной картинки под контейнер
   if (realWidthPic > realHeightPic) {
     if ((imgContWidth/ratioPic) <= imgContHeight) {
       fittedWidthPic  = imgContWidth;	
       fittedHeightPic = fittedWidthPic / ratioPic;				
     } else {					
      fittedHeightPic = imgContHeight;	
      fittedWidthPic  = fittedHeightPic * ratioPic;
    }
   } else {
    fittedHeightPic = imgContHeight;
    fittedWidthPic  = fittedHeightPic * ratioPic;			
   }
   // установка подогнанных размеров изображения
   uploadImage.height(fittedHeightPic);
   uploadImage.width(fittedWidthPic);					
    uploadImage.show();
//  }, 10);   // отсрочка выполнения на 10мс, можно даже поставить 0-эффект тот же
  }; 	 // end #B
 })();   // end #C	
 oReaderUploadPic.readAsDataURL(file);  // считываем текущий image file как data URL
  
}); // end#1
Ответить с цитированием
  #2 (permalink)  
Старый 05.09.2015, 02:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

setTimeout не пойдет, нужно обрабатывать окончание загрузки изображения. Или же - oReaderUploadPic.readAsDataURL(file) возвращает все данные о файле, а зная какого формата изображение, можно из этих данных получить данные только заголовка файла, в котором указано и его разрешение.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая ширина и высота div dimous Элементы интерфейса 6 08.08.2013 00:22
Определение высоты изображения. m-pokrovskii jQuery 4 11.02.2012 02:02
высота окна определяется не всеми браузерами cyklop77 Javascript под браузер 1 23.08.2011 07:25
Помогите с калькулятором piton1175 AJAX и COMET 0 16.06.2011 14:29
Ширина и высота всего документа. mycoding Общие вопросы Javascript 0 07.02.2010 15:04