Изменение размера jQuery в пропорции

Как изменить размер изображения в jQuery на согласованное соотношение сторон. Например, установите максимальную высоту и правильно измените ширину. Спасибо.

Ответы

Ответ 1

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

то есть:.

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

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

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));
}

Ответ 2

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

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'});
    });
};

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

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

Ответ 3

Используйте JQueryUI Resizeable

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

aspectRatio: true → сохранить исходное соотношение сторон

Ответ 4

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

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

Должно быть достаточно прямо, чтобы преобразовать в 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;
}