Frage

Vor langer Zeit habe ich eine kleine Bibliothek für Bilder mit ImageMagick durch system(...) Ändern der Größe, weil ich nicht das Gefühl, dass die Build-in imagemagick Funktionen für PHP ausreichten.

Doch vor kurzem hatte ich in dem Hafen dies zu einem symfony-Projekt und ich wählte sfThumbnailPlugin zu verwenden (wenn ich mich richtig erinnere). Dies ist leider nicht enthalten die Ernte Funktionalität - das heißt, eine gewünschte Größe zu spezifizieren, z.B. 300x300 px und haben die Miniaturansicht abgeschnitten, so dass es passt. Ich habe mich für diese Funktionalität selbst zu implementieren, aber es scheint etwas nicht in Ordnung zu sein.

Jedes Mal, wenn ich ein Bild auf eine gewünschte Größe gibt die Größe WHE Breite größer als die Höhe ist, erhalten die Proportionen geschraubt. Werfen Sie einen Blick auf dieses Beispiel: http://i37.tinypic.com/9hkqrl.png -. In diesem Beispiel ist die obere Reihe ist die richtigen Proportionen und die untere Reihe ist das Problem

Im Beispiel oben und unten abgeschnitten werden sollten.

Hier ist der Code für den Teil, wo die Ernte (die Variablennamen sollten selbsterklärend sein) durchgeführt wird:

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

Ist der zweite Teil der if-Anweisung, die den falschen Code erzeugt.

Kann jemand korrigiert das für mich? Offensichtlich sind die Berechnungen falsch sind.

War es hilfreich?

Lösung

Die Lösung war die folgende:

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

Andere Tipps

Ich sage ein Vorschlag, den Sie können es versuchen,

ich sah das Bild Link Ich denke, die Bedingungen nicht korrekt überprüft werden.

Sie haben geprüft Bedingung [(Breite / Höhe)> (maxWidth / maxHeight)] Statt Kontrolle

if (Breite == Höhe) {} Elseif (Breite> Höhe) {} sonst (Breite

Überprüfen Sie diesen Zustand und nach dieser Bedingung Ernte das Bild und die Größe neu.

Danke

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top