Question

Il y a longtemps que j'ai créé une petite bibliothèque pour redimensionner des images en utilisant ImageMagick par system(...) parce que je ne me sentais pas que l'accumulation dans les fonctions de ImageMagick pour PHP suffisaient.

Cependant, récemment, je devais le port à un projet symfony et j'ai choisi d'utiliser sfThumbnailPlugin (si je me souviens bien). Malheureusement, cela n'a pas inclus la fonctionnalité de culture - à savoir spécifier une taille souhaitée, par exemple 300x300 px et ont la vignette recadrée afin qu'il convient. J'ai choisi de mettre en œuvre cette fonctionnalité moi-même, mais il semble y avoir quelque chose de mal.

Chaque fois que je redimensionner une image à une taille souhaitée, il WHE largeur est supérieure à la hauteur, les proportions se vissent. Jetez un oeil à cet exemple: http://i37.tinypic.com/9hkqrl.png -. Dans cet exemple, la rangée supérieure sont les proportions correctes et la rangée du bas est le problème

Dans l'exemple, le haut et le bas devraient recadrées.

Voici le code pour la partie où la récolte se fait (les noms de variables doivent être explicites):

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

Est est la deuxième partie de l'instruction if qui produit le code erroné.

Quelqu'un peut-il corriger cela pour moi? Il est évident que les calculs sont erronés.

Était-ce utile?

La solution

La solution est la suivante:

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

Autres conseils

Je dis une suggestion que vous pouvez l'essayer,

J'ai vu le lien d'image, je pense que les conditions ne sont pas vérifiées correctement.

vous avez vérifié l'état [(largeur / hauteur)> (maxWidth / maxHeight)] Au lieu de l'enregistrement

if (largeur == hauteur) {} elseif (largeur> hauteur) {} autre (largeur

Vérifier cette condition et selon cette culture condition l'image et redimensionner.

Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top