2009-11-05 5 views

ответ

12

Вы можете вычислить это вручную,

т.е .:

function GetWidth(newHeight,orginalWidth,originalHeight) 
{ 
if(currentHeight == 0)return newHeight; 
var aspectRatio = currentWidth/currentHeight; 
return newHeight * aspectRatio; 
} 

Убедитесь, что вы используете исходные значения для изображения в противном случае она будет ухудшаться со временем.

EDIT: пример JQuery версия (не тестировалось)

jQuery.fn.resizeHeightMaintainRatio = function(newHeight){ 
    var aspectRatio = $(this).data('aspectRatio'); 
    if (aspectRatio == undefined) { 
     aspectRatio = $(this).width()/$(this).height(); 
     $(this).data('aspectRatio', aspectRatio); 
    } 
    $(this).height(newHeight); 
    $(this).width(parseInt(newHeight * aspectRatio)); 
} 
+0

Есть ли способ, чтобы установить максимальную ширину и высоту существующего образа, как - ImageResize ("imgID", MaxWidth, MaxHeight); Я пробовал подобные методы в PHP, но просматривая плагины jquery, я не мог найти тот, который мог бы сделать трюк. – usertest

+0

Объясните, что вы подразумеваете под максимум. Есть атрибуты max width/height css, это не то, что вы ищете? – Paul

+0

Спасибо. Второй пример близок к тому, что я искал, но пример не работает. Насколько я могу судить, одна из проблем заключается в том, что изменение ширины или высоты должно быть задано функцией css(). Я пробовал это, но пример все равно не работает. Это потому, что aspectRatio не установлен? – usertest

9

Использование JQueryUI Resizeable

$("#some_image").resizable({ aspectRatio:true, maxHeight:300 }); 

AspectRatio: правда -> сохранить исходное соотношение сторон

+1

Да, но это много накладных, чтобы вызывать, если вы еще не используете пользовательский интерфейс. – Paul

+4

Согласен, но это код, который вам не нужно писать/поддерживать. –

+0

Конечно, вполне возможно, что он уже пытается реплицировать функциональность изменяемого размера плагина ... вызов resizeable будет намного больше, чем просто изменить размер изображения, кстати. – Paul

19

Вот полезная функция, которая может делать то, что вы хотите:

jQuery.fn.fitToParent = function() 
{ 
    this.each(function() 
    { 
     var width = $(this).width(); 
     var height = $(this).height(); 
     var parentWidth = $(this).parent().width(); 
     var parentHeight = $(this).parent().height(); 

     if(width/parentWidth < height/parentHeight) { 
      newWidth = parentWidth; 
      newHeight = newWidth/width*height; 
     } 
     else { 
      newHeight = parentHeight; 
      newWidth = newHeight/height*width; 
     } 
     var margin_top = (parentHeight - newHeight)/2; 
     var margin_left = (parentWidth - newWidth)/2; 

     $(this).css({'margin-top' :margin_top + 'px', 
        'margin-left':margin_left + 'px', 
        'height'  :newHeight + 'px', 
        'width'  :newWidth + 'px'}); 
    }); 
}; 

В принципе, он захватывает элемент, центрирует его внутри родителя, а затем растягивает его так, чтобы ни один фон родителя не был виден, сохраняя соотношение сторон.

Опять же, это может быть не то, что вы хотите сделать.

+2

Спасибо, это была огромная помощь! – sowasred2012

+0

Это может привести к тому, что newWidth или newHeight будут больше, чем соответствующие размеры родителя. Вместо этого я бы рекомендовал что-то вроде: http://stackoverflow.com/a/115492/175830 –

+1

@JasonAxelson: В этом мой вопрос полностью. Этот код гарантирует, что оба размера изображения ** больше ** или равны размеру родителя. Это делается для покрытия, а не заполнения. – Eric

1

Там нет учета количества копий и пастеров там, а! Я также хотел знать это, и все, что я видел, было бесконечными примерами масштабирования ширины или высоты .. кто хотел бы, чтобы другой переполнял ?!

  • ширина Изменение размера и высоты без необходимости цикла
  • не превышает первоначальные размеры изображения
  • Использует математику, которая работает должным образом, т.е. ширина/аспект по высоте, а высота * аспект для ширины так изображений фактически масштабируется должным образом вверх и вниз:/

Должно быть прямо вперед достаточно, чтобы преобразовать в Javascript или других языках

//////////////

private void ResizeImage(Image img, double maxWidth, double maxHeight) 
{ 
    double srcWidth = img.Width; 
    double srcHeight = img.Height; 

    double resizeWidth = srcWidth; 
    double resizeHeight = srcHeight; 

    double aspect = resizeWidth/resizeHeight; 

    if (resizeWidth > maxWidth) 
    { 
     resizeWidth = maxWidth; 
     resizeHeight = resizeWidth/aspect; 
    } 
    if (resizeHeight > maxHeight) 
    { 
     aspect = resizeWidth/resizeHeight; 
     resizeHeight = maxHeight; 
     resizeWidth = resizeHeight * aspect; 
    } 

    img.Width = resizeWidth; 
    img.Height = resizeHeight; 
} 
+0

Если высота и ширина изображения меньше, чем maxHeight, maxWidth он не масштабирует изображение вверх. – tech20nn

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