Изменение размера 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;
}