Maison >développement back-end >tutoriel php >Comment puis-je optimiser le recadrage d'image en PHP pour les grandes images tout en préservant les proportions ?

Comment puis-je optimiser le recadrage d'image en PHP pour les grandes images tout en préservant les proportions ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 17:25:30854parcourir

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

Recadrage d'images en PHP : optimisation pour les grandes images et préservation des proportions

L'extrait de code fourni recadre efficacement les images, mais les résultats peuvent se détériorer lorsqu'il est appliqué à des images plus grandes. Pour résoudre ce problème, nous explorerons une approche alternative qui consiste à redimensionner l'image d'origine avant de la recadrer pour obtenir des résultats cohérents et optimaux.

Redimensionnement pour la préservation des proportions

Avant En recadrant une image, il est essentiel de conserver ses proportions pour éviter toute distorsion. Le rapport hauteur/largeur est la proportion entre la largeur de l’image et sa hauteur. En redimensionnant l'image de sorte que le plus petit côté corresponde aux dimensions de recadrage souhaitées, nous pouvons conserver le rapport hauteur/largeur d'origine.

Implémentation du code

Pour mettre en œuvre le redimensionnement et le recadrage de l'image, nous modifierons la partie suivante du code fourni :

<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>

Explication

  1. Nous calculons le rapport hauteur/largeur d'origine (original_aspect) et le rapport hauteur/largeur cible (thumb_aspect) pour déterminer les nouvelles dimensions de l'image.
  2. Nous vérifions si l'image originale est plus large que la vignette en termes de rapport hauteur/largeur.
  3. Si l'image originale est plus large, nous définissons la nouvelle hauteur pour correspondre à la hauteur de la vignette et calculer la nouvelle largeur proportionnellement.
  4. Si la vignette est plus large, nous définissons la nouvelle largeur pour qu'elle corresponde à la largeur de la vignette et calculons la nouvelle hauteur proportionnellement.
  5. Nous créons une nouvelle image ($thumb) avec les dimensions de vignette souhaitées.
  6. Nous utilisons imagecopyresampled() pour redimensionner et recadrer l'image originale dans la nouvelle vignette, en conservant les proportions.
  7. Enfin , nous enregistrons la vignette recadrée dans le fichier spécifié.

En suivant cette approche, nous pouvons recadrer efficacement des images plus grandes et préserver les proportions, offrant ainsi des résultats cohérents et de haute qualité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn