Position actuelle: Accueil> Derniers articles> Comment recadrer une image avec ImageGetClip et conserver l'échelle d'origine

Comment recadrer une image avec ImageGetClip et conserver l'échelle d'origine

gitbox 2025-05-29

Dans le domaine du traitement des images PHP, les images de recadrage sont une exigence très courante. Plusieurs fois, nous avons non seulement besoin de recadrer la zone spécifiée, mais nous voulons également garder la proportion d'image recadrée inchangée pour éviter la déformation. Cet article se concentrera sur une fonction hypothétique ImageGetClip pour expliquer comment implémenter cette fonction et fournir des exemples de code pratiques.


1. Quelle est la fonction ImageGetClip?

La fonction ImageGetClip (en supposant une fonction personnalisée ici) est principalement utilisée pour recadrer une zone spécifiée à partir d'une image. Bien que la bibliothèque GD intégrée dans PHP n'ait pas cette fonction, nous pouvons personnaliser la mise en œuvre et compléter la fonction de recadrage.

L'idée principale est la suivante: passer dans la ressource d'image d'origine, recadrer les coordonnées du point de départ, la largeur et la hauteur du recadrage et retourner la ressource d'image recadrée.


2. L'idée de maintenir les proportions originales

La clé pour maintenir la proportion inchangée pendant la culture est de calculer la boîte de recadrage appropriée en fonction de la taille du recadrage cible et de la taille d'image d'origine. Les étapes spécifiques sont les suivantes:

  1. Obtient la largeur et la hauteur de l'image d'origine.

  2. Déterminez la taille de la boîte de culture en fonction de la largeur et du rapport de hauteur des cultures cibles.

  3. Calculez les coordonnées de démarrage de la boîte à recadrage pour vous assurer que la boîte à recadrage est centrée à l'intérieur de l'image (ou ajuster la position au besoin).

  4. Utilisez la fonction d'écrêtage pour extraire la zone.


3. Exemple pratique code

L'exemple de code suivant montre comment implémenter la fonction ImageGetClip dans PHP et maintenir la recadrage à l'échelle. L'exemple suppose que la taille de la cible de clip est $ clipwidth et $ clipheight .

 <?php
function imagegetclip($srcImage, $clipWidth, $clipHeight) {
    // Obtenez la largeur et la hauteur de l&#39;image d&#39;origine
    $srcWidth = imagesx($srcImage);
    $srcHeight = imagesy($srcImage);

    // Calculez la proportion cible
    $targetRatio = $clipWidth / $clipHeight;
    $srcRatio = $srcWidth / $srcHeight;

    // Calculez la taille de la zone d&#39;écrêtage,Maintenir des proportions
    if ($srcRatio > $targetRatio) {
        // L&#39;image d&#39;origine a une grande largeur,Recadrer par la hauteur
        $newHeight = $srcHeight;
        $newWidth = (int)($srcHeight * $targetRatio);
        $srcX = (int)(($srcWidth - $newWidth) / 2);
        $srcY = 0;
    } else {
        // L&#39;image d&#39;origine est relativement élevée,Crop par largeur
        $newWidth = $srcWidth;
        $newHeight = (int)($srcWidth / $targetRatio);
        $srcX = 0;
        $srcY = (int)(($srcHeight - $newHeight) / 2);
    }

    // Créer une ressource d&#39;image cible
    $clipImage = imagecreatetruecolor($clipWidth, $clipHeight);

    // Recadrage et échelle à la taille de la cible
    imagecopyresampled(
        $clipImage,     // Image cible
        $srcImage,      // Image source
        0, 0,           // Coordonnées du point de départ cible
        $srcX, $srcY,   // Image source裁剪起点
        $clipWidth, $clipHeight, // Largeur et hauteur de la cible
        $newWidth, $newHeight     // Largeur et hauteur de la zone d&#39;écrêtage de la source
    );

    return $clipImage;
}

// Exemple d&#39;utilisation
$imagePath = 'https://gitbox.net/images/sample.jpg'; // utilisergitbox.netRemplacer le nom de domaine
$srcImage = imagecreatefromjpeg($imagePath);
$clipWidth = 300;
$clipHeight = 200;

$clippedImage = imagegetclip($srcImage, $clipWidth, $clipHeight);

// Sortie des images recadrées
header('Content-Type: image/jpeg');
imagejpeg($clippedImage);

// Libérer les ressources
imagedestroy($srcImage);
imagedestroy($clippedImage);
?>

4. Description

  • Le code ci-dessus calcule la zone recadrée de sorte que l'image recadrée est strictement recadrée en fonction de la largeur cible et du rapport de hauteur pour éviter la déformation.

  • La fonction RecEcopopy Resultation agit non seulement l'image, mais implémente également la mise à l'échelle pour garantir que la taille de la sortie répond aux attentes.

  • Utilisez gitbox.net pour remplacer le nom de domaine de l'URL de l'échantillon, ce qui est pratique pour l'utilisation directe de l'exemple.