2009-11-05 10 views

risposta

12

Si potrebbe calcolare questo manualmente,

cioè .:

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

assicurarsi di utilizzare i valori originali per l'immagine altrimenti si degrada nel tempo.

EDIT: ad esempio la versione jQuery (non testato)

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

C'è un modo per impostare la massima larghezza e l'altezza di un'immagine esistente come - ImageResize ("imgID", maxwidth, maxHeight); Ho provato tecniche simili in PHP, ma guardando attraverso i plugin jquery non riuscivo a trovarne uno che potesse fare il trucco. – usertest

+0

Spiega cosa intendi per massimo. Ci sono gli attributi max css larghezza/altezza, non è quello che stai cercando? – Paul

+0

Grazie. Il secondo esempio è vicino a quello che stavo cercando, ma l'esempio non funziona. Per quanto posso dire uno dei problemi è che la modifica della larghezza o dell'altezza dovrebbe essere impostata dalla funzione css(). Ci ho provato ma l'esempio continua a non funzionare. È perché l'aspectRatio non è impostato? – usertest

9

Usa JQueryUI Resizeable

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

aspectRatio: true -> mantenere proporzioni originali

+1

Sì, ma è un sacco di overhead da invocare se non stai già utilizzando l'interfaccia utente. – Paul

+4

Concordato, ma è il codice che non è necessario scrivere/mantenere. –

+0

Naturalmente potrebbe benissimo essere (s) sta già cercando di replicare la funzionalità del plug-in ridimensionabile ... chiamare ridimensionabile è molto più che ridimensionare l'immagine, btw. – Paul

19

Ecco una funzione utile che potrebbe fare quello vuoi:

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

Fondamentalmente, afferra un elemento, lo centra all'interno del genitore, quindi lo allunga per adattarlo in modo tale che nessuno dello sfondo del genitore sia visibile, pur mantenendo le proporzioni.

Quindi, di nuovo, questo potrebbe non essere quello che vuoi fare.

+2

Grazie, questo è stato un grande aiuto! – sowasred2012

+0

Ciò a volte farà sì che il nuovoWidth o newHeight sia più grande delle rispettive dimensioni padre. Invece suggerirei qualcosa come: http://stackoverflow.com/a/115492/175830 –

+1

@JasonAxelson: Questo è interamente il punto della mia risposta. Questo codice garantisce che entrambe le dimensioni dell'immagine siano ** maggiori di ** o uguali alla dimensione del genitore. Questo mira a coprire, non riempire. – Eric

1

Non c'è contabilità per la quantità di copia e di pastori là fuori eh! Volevo anche sapere questo e tutti quelli che ho visto erano infiniti esempi di larghezza di scala O altezza ... chi vorrebbe che l'altro traboccasse ?!

  • larghezza ridimensionare e altezza senza la necessità di un ciclo
  • non superi le immagini dimensioni originarie
  • Utilizzi la matematica che funziona correttamente cioè larghezza/aspetto in altezza, e l'altezza * aspetto di larghezza in modo immagini sono in realtà in scala correttamente su e giù:/

deve essere dritta abbastanza avanti per convertire in JavaScript o altre lingue

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

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

Se altezza e larghezza dell'immagine sono entrambe inferiori a maxHeight, maxWidth non ridimensiona l'immagine. – tech20nn

Problemi correlati