Position actuelle: Accueil> Derniers articles> Crop PNG Images avec la fonction ImageCrop et conserver un arrière-plan transparent

Crop PNG Images avec la fonction ImageCrop et conserver un arrière-plan transparent

gitbox 2025-05-29

Lorsque vous utilisez PHP pour traiter les images, la fonction ImageCrop () est un outil très pratique qui peut recadrer des images dans des zones spécifiées. Mais si vous avez affaire à des images PNG avec un fond transparent, un traitement incorrect peut entraîner la perte de fond transparent après la récolte et devenir un fond noir ou blanc. Cet article expliquera en détail comment garder les images PNG transparentes lors du recadrage avec la fonction ImageCrop () .

1. Introduction à la fonction ImageCrop ()

ImageCrop () est une fonction introduite par PHP 5.5.0. Sa fonction est de renvoyer une nouvelle ressource d'image, qui est le résultat de la réussite de l'image d'origine en fonction de la taille spécifiée. L'utilisation de base est la suivante:

 $cropped = imagecrop($image, ['x' => 100, 'y' => 100, 'width' => 200, 'height' => 200]);

Si $ l'image est une image PNG et que vous souhaitez conserver l'arrière-plan transparent de l'image d'origine après le recadrage, les détails clés auxquels vous devez faire attention seront présentés ci-dessous.

2. Points clés de la culture de fond transparent

Lors du traitement des images PNG et du recadrage à l'aide d'imageCrop () , les pièces transparentes sont généralement remplies en noir sans traitement supplémentaire. En effet, PHP ne conserve pas automatiquement les canaux transparents par défaut.

Pour résoudre ce problème, vous devez effectuer les étapes suivantes après avoir recadressé l'image:

  1. Créer une nouvelle toile transparente;

  2. Activer la sauvegarde du canal alpha;

  3. Copiez l'image recadrée sur cette toile transparente;

  4. Sortie finale ou enregistrer l'image.

3. Exemple de code complet

Voici un exemple de code complet montrant comment recadrer correctement les images PNG avec un fond transparent et les garder transparents:

 <?php
// Chargez l&#39;image d&#39;origine
$sourcePath = 'https://gitbox.net/images/sample.png';
$src = imagecreatefrompng($sourcePath);

// Définir la zone des cultures
$cropArea = [
    'x' => 50,
    'y' => 50,
    'width' => 200,
    'height' => 200
];

// Recadrer l&#39;image
$cropped = imagecrop($src, $cropArea);

if ($cropped !== false) {
    // Créer une nouvelle toile transparente
    $transparent = imagecreatetruecolor($cropArea['width'], $cropArea['height']);
    
    // Activer le mode mixte de transparence
    imagealphablending($transparent, false);
    
    // Enregistrer le completalphaInformations sur les canaux
    imagesavealpha($transparent, true);
    
    // Remplissez la toile de couleurs transparentes
    $transparentColor = imagecolorallocatealpha($transparent, 0, 0, 0, 127);
    imagefill($transparent, 0, 0, $transparentColor);
    
    // 拷贝Recadrer l&#39;image到透明画布上
    imagecopy($transparent, $cropped, 0, 0, 0, 0, $cropArea['width'], $cropArea['height']);
    
    // Image de sortie au navigateur
    header('Content-Type: image/png');
    imagepng($transparent);

    // Détruire les ressources
    imagedestroy($transparent);
    imagedestroy($cropped);
    imagedestroy($src);
} else {
    echo 'Croping a échoué';
}
?>

4. Choses à noter

  • Une nouvelle toile doit être créée à l'aide d' imageCreateTrueColor () car la ressource d'image renvoyée par ImageCrop () peut ne pas contenir les informations alpha correctes.

  • L'utilisation d'imageAlPhableEnding () et d'imagesVavealpha () est la clé pour maintenir un arrière-plan transparent.

  • Si vous prévoyez d'enregistrer l'image finale en tant que fichier, vous pouvez utiliser ImagePNG ($ transparent, 'Output.png') au lieu d' imagepng ($ transparent) .

5. Résumé

Les images PNG de recadrage et le maintien de leur effet de fond transparent sont complètement réalisables dans PHP, il suffit de définir correctement le canal alpha de la ressource d'image. En combinant l'imagecrop () et la toile transparente, vous pouvez contrôler avec précision la zone de recadrage et maintenir la transparence d'origine de l'image, qui convient aux scènes telles que la recadrage des avatar et le traitement des cartes.

La maîtrise de cette technique peut améliorer considérablement la qualité et le professionnalisme du traitement d'image PHP.