Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich den Bildzuschnitt in PHP für große Bilder optimieren und gleichzeitig das Seitenverhältnis beibehalten?

Wie kann ich den Bildzuschnitt in PHP für große Bilder optimieren und gleichzeitig das Seitenverhältnis beibehalten?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 17:25:30813Durchsuche

How can I optimize image cropping in PHP for large images while preserving the aspect ratio?

Bildzuschnitt in PHP: Optimierung für große Bilder und Beibehaltung des Seitenverhältnisses

Das bereitgestellte Code-Snippet schneidet Bilder effektiv zu, aber die Ergebnisse können sich verschlechtern wenn es auf größere Bilder angewendet wird. Um dieses Problem anzugehen, werden wir einen alternativen Ansatz untersuchen, bei dem die Größe des Originalbilds vor dem Zuschneiden geändert wird, um konsistente und optimale Ergebnisse zu erzielen.

Größenänderung zur Beibehaltung des Seitenverhältnisses

Vorher Beim Zuschneiden eines Bildes ist es wichtig, das Seitenverhältnis beizubehalten, um Verzerrungen zu vermeiden. Das Seitenverhältnis ist das Verhältnis der Breite des Bildes zur Höhe. Indem wir die Größe des Bildes so ändern, dass die kleinere Seite den gewünschten Zuschnittabmessungen entspricht, können wir das ursprüngliche Seitenverhältnis beibehalten.

Code-Implementierung

Um die Größenänderung und das Zuschneiden von Bildern zu implementieren, Wir werden den folgenden Teil des bereitgestellten Codes ändern:

<code class="php">$image = imagecreatefromjpeg($_GET['src']);
$filename = 'images/cropped_whatever.jpg';

$thumb_width = 200;
$thumb_height = 150;

$width = imagesx($image);
$height = imagesy($image);

$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;

if ( $original_aspect >= $thumb_aspect )
{
   // If image is wider than thumbnail (in aspect ratio sense)
   $new_height = $thumb_height;
   $new_width = $width / ($height / $thumb_height);
}
else
{
   // If the thumbnail is wider than the image
   $new_width = $thumb_width;
   $new_height = $height / ($width / $thumb_width);
}

$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );

// Resize and crop
imagecopyresampled($thumb,
                   $image,
                   0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
                   0 - ($new_height - $thumb_height) / 2, // Center the image vertically
                   0, 0,
                   $new_width, $new_height,
                   $width, $height);
imagejpeg($thumb, $filename, 80);</code>

Erklärung

  1. Wir berechnen das ursprüngliche Seitenverhältnis (original_aspect) und das Zielseitenverhältnis (thumb_aspect), um die neuen Abmessungen des Bildes zu bestimmen.
  2. Wir prüfen, ob das Originalbild im Hinblick auf das Seitenverhältnis breiter als das Miniaturbild ist.
  3. Wenn das Originalbild breiter ist, stellen wir ein Stellen Sie die neue Höhe so ein, dass sie mit der Höhe des Miniaturbilds übereinstimmt, und berechnen Sie die neue Breite proportional.
  4. Wenn das Miniaturbild breiter ist, stellen wir die neue Breite so ein, dass sie mit der Breite des Miniaturbilds übereinstimmt, und berechnen die neue Höhe proportional.
  5. Wir erstellen ein neues Bild ($thumb) mit den gewünschten Miniaturbildabmessungen.
  6. Wir verwenden imagecopyresampled(), um die Größe des Originalbilds zu ändern und es in das neue Miniaturbild zuzuschneiden, wobei das Seitenverhältnis beibehalten wird.
  7. Endlich , speichern wir das zugeschnittene Miniaturbild in der angegebenen Datei.

Durch diesen Ansatz können wir größere Bilder effektiv zuschneiden und das Seitenverhältnis beibehalten, wodurch konsistente und qualitativ hochwertige Ergebnisse geliefert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich den Bildzuschnitt in PHP für große Bilder optimieren und gleichzeitig das Seitenverhältnis beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn