Domanda

Molto tempo fa ho creato una piccola biblioteca per il ridimensionamento delle immagini utilizzando ImageMagick attraverso system(...) perché non ho la sensazione che il build-in funzioni di ImageMagick per PHP sono stati sufficienti.

Tuttavia, di recente ho dovuto port ad un progetto symfony e ho scelto di usare sfThumbnailPlugin (se non ricordo male). Questo, purtroppo, non ha incluso la funzionalità delle colture - vale a dire per specificare una dimensione desiderata, per esempio 300x300 px e hanno la miniatura ritagliata in modo che si adattano. Ho scelto di implementare questa funzionalità me stesso, ma sembra che ci sia qualcosa che non va.

Ogni volta che ridimensionare un'immagine ad una dimensione desiderata non whe larghezza è superiore all'altezza, le proporzioni vengono avvitati. Date un'occhiata a questo esempio: http://i37.tinypic.com/9hkqrl.png -. In questo esempio la riga superiore è corrette proporzioni e la riga inferiore è il problema

Nell'esempio, la parte superiore e inferiore avrebbero dovuto essere tagliate.

Ecco il codice per la parte in cui viene effettuato il raccolto (i nomi delle variabili devono essere auto-esplicativo):

<?php
    if ($width/$height > $this->maxWidth/$this->maxHeight) {
      // then resize to the new height...
                $command .= ' -resize "x'.$this->maxWidth.'"';

                // ... and get the middle part of the new image
                // what is the resized width?
                $resized_w = ($this->maxWidth/$height) * $width;

                // crop
                $command .= ' -crop "'.$this->maxHeight.'x'.$this->maxWidth.'+'.round(($resized_w - $this->maxWidth)/2).'+0"';
            } else {
                // or else resize to the new width
                $command .= ' -resize "'.$this->maxHeight.'x"';

                // ... and get the middle part of the new image
                // what is the resized height?
                $resized_h = ($this->maxHeight/$width) * $height;

                // crop
                $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.
                             '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage';
            }

IS è la seconda parte della if che produce il codice errato.

Qualcuno può correggere questo per me? Ovviamente i calcoli sono sbagliati.

È stato utile?

Soluzione

La soluzione è stata la seguente:

    if ($width/$height > $this->maxWidth/$this->maxHeight) {
      // then resize to the new height...
                $command .= ' -resize "x'.$this->maxHeight.'"';

                // ... and get the middle part of the new image
                // what is the resized width?
                $resized_w = ($this->maxHeight/$height) * $width;

                // crop
                $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.'+'.round(($resized_w - $this->maxWidth)/2).'+0" +repage';
            } else {
              $command .= ' -resize "' . $this->maxWidth . 'x"';
              $resized_h = ($this->maxWidth/$width) * $height;

                // crop
                $command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.
                             '+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage';
            }

Altri suggerimenti

dico un suggerimento si può provare,

Ho visto il link Immagine penso che le condizioni non sono controllati in modo corretto.

condizione

è stata selezionata [(larghezza / altezza)> (maxwidth / maxHeight)] Al posto di controllo

if (width == altezza) {} elseif (larghezza> altezza) {} altro (larghezza

Controlla questa condizione e in base a questa condizione delle colture l'immagine e ridimensionare.

Grazie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top