2009-11-05 80 views

回答

12

您可以手動計算這個,

即:

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

確保您使用的原始值的圖像否則會隨着時間的推移。

編輯:例如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 2009-11-05 18:27:27

+0

解釋你最大的意思。有最大的寬度/高度CSS屬性,是不是你在找什麼? – Paul 2009-11-05 19:16:43

+0

謝謝。第二個例子接近我所尋找的,但是這個例子不起作用。據我可以告訴其中一個問題是改變寬度或高度應該由css()函數設置。我嘗試過,但該示例仍然無效。那是因爲aspectRatio沒有設置? – usertest 2009-11-06 15:26:45

9

使用JQueryUI Resizeable

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

的aspectRatio:真 - >保持原始寬高比

+1

是的,但如果您尚未使用用戶界面,那麼需要調用大量開銷。 – Paul 2009-11-05 18:41:01

+4

同意,但它是你不需要編寫/維護的代碼。 – 2009-11-05 18:44:02

+0

當然,他很可能已經在嘗試複製可調整大小的插件的功能...調用可調整大小不僅僅是調整圖像的大小,順便說一句。 – Paul 2009-11-05 18:45:08

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 2013-01-08 14:30:24

+0

這有時會導致newWidth或newHeight大於各自的父維度。相反,我建議這樣的: http://stackoverflow.com/a/115492/175830 – 2015-05-07 23:20:56

+1

@JasonAxelson:這完全是我的答案中的一點。此代碼可確保圖像的兩個尺寸均大於**或等於父級的尺寸。這旨在覆蓋,而不是填充。 – Eric 2015-05-08 13:47:36

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 2012-06-12 13:56:09

相關問題