Algoritmo di calcolo delle coordinate dell'immagine

0

Stavo guardando il codice della libreria Jcrop per il calcolo della dimensione delle immagini in scala, ma non potevo capire chiaramente l'algoritmo usato nella seguente funzione:

link

function presize($obj, w, h)
{
  var nw = $obj.width(),
      nh = $obj.height();
  if ((nw > w) && w > 0) {
    nw = w;
    nh = (w / $obj.width()) * $obj.height();
  }
  if ((nh > h) && h > 0) {
    nh = h;
    nw = (h / $obj.height()) * $obj.width();
  }
  xscale = $obj.width() / nw;
  yscale = $obj.height() / nh;
  $obj.width(nw).height(nh);
}

So che utilizza l'oggetto immagine jQuery e boxWidth e boxHeight come descritto nel seguente link:
link

Ma voglio capire l'algoritmo usato.

    
posta Tahir 22.04.2014 - 14:42
fonte

2 risposte

5

Consente di suddividerlo in pezzi, vero?

function presize($obj, w, h)
{

Accetta un oggetto jQuery ($ obj) con una larghezza e un'altezza di ridimensionamento. Come faccio a sapere che richiede un oggetto jQuery? Le funzioni width() e height() non sono native per gli elementi dom.

  var nw = $obj.width(),
      nh = $obj.height();

Crea due nuove variabili corrispondenti alla larghezza e all'altezza attuali dell'oggetto.

  if ((nw > w) && w > 0) {
    nw = w;
    nh = (w / $obj.width()) * $obj.height();
  }

Se la larghezza corrente dell'oggetto è maggiore della larghezza di ridimensionamento (e assumendo che la larghezza di ridimensionamento abbia un valore significativo), nw viene riassegnato per ridimensionare la larghezza w , e nh è assegnato a un'altezza proporzionale alla larghezza ridimensiona ( w / $obj.width() sarebbe la proporzione della nuova larghezza rispetto alla vecchia larghezza. Se fossero uguali, sarebbe 1 e quindi non l'altezza della probabilità.

  if ((nh > h) && h > 0) {
    nh = h;
    nw = (h / $obj.height()) * $obj.width();
  }

Fai lo stesso per l'altezza, assumendo che la nuova altezza sia maggiore dell'altezza di ridimensionamento h e l'altezza superata sia un valore significativo.

  xscale = $obj.width() / nw;
  yscale = $obj.height() / nh;

Crea o assegna variabili globali xscale e yscale a inverso di proporzioni appena create. In altre parole, se hai dimezzato larghezza e altezza, xscale sarebbe 200% e yscale sarebbe 200%. Questo è probabile per sapere come invertire l'operazione in seguito, anche se è solo speculativo.

Questo è un effetto collaterale della funzione, e questa è generalmente una cattiva pratica dal momento che può essere guardata troppo facilmente, tuttavia mentirei se affermassi di non aver mai avuto bisogno di fare qualcosa di simile. Chiamami pigro.

  $obj.width(nw).height(nh);

Tentativo di assegnare la nuova larghezza e altezza dell'oggetto alla larghezza e all'altezza calcolate. Se questa fosse un'immagine, probabilmente funzionerebbe bene, tuttavia, questo non significa che la larghezza e l'altezza risultanti siano la larghezza e l'altezza calcolate.

}

Spero che questo aiuti.

    
risposta data 22.04.2014 - 14:52
fonte
0

Ho usato alcuni valori semplici per verificare come funziona. La mia comprensione:

Se l'altezza e la larghezza richieste sono maggiori dell'altezza e della larghezza dell'oggetto, non fa nulla.

Se la larghezza richiesta è inferiore alla larghezza dell'oggetto, si assuma la nuova larghezza alla larghezza richiesta. Calcola la nuova altezza in base alla proporzione della larghezza dell'oggetto richiesta e corrente.

Se l'altezza calcolata sopra è maggiore dell'altezza richiesta, assume la nuova altezza all'altezza desiderata. Calcola la nuova larghezza in base alla proporzione di altezza oggetto richiesta e corrente.

  • Corrente: 100, 50 Obbligatorio: 200, 100 = > non fare niente
  • Corrente: 200, 100 Obbligatorio: 100, 50 = > riduci larghezza e altezza del 50%
  • Corrente: 200, 100 Richiesto: 100, 40 = > riduci larghezza e altezza del 40%
  • Corrente: 200, 100 Obbligatorio: 100 , 60 = > ridurre la larghezza e altezza del 50%
  • Corrente: 200, 100 Obbligatorio: 300, 60 = > ridurre il larghezza e altezza del 60%
risposta data 07.05.2014 - 10:41
fonte

Leggi altre domande sui tag