Maison  >  Article  >  développement back-end  >  Comment redimensionner des GIF animés en PHP tout en préservant l’animation ?

Comment redimensionner des GIF animés en PHP tout en préservant l’animation ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-07 21:16:03350parcourir

How can I resize animated GIFs in PHP while preserving animation?

Redimensionner les GIF animés avec préservation de l'animation en PHP

Le redimensionnement des GIF animés tout en conservant l'animation peut être réalisé à l'aide d'outils externes comme ImageMagick ou via un combinaison de fonctions de la bibliothèque GD.

Méthode ImageMagick :

Si vous avez accès à ImageMagick, les commandes suivantes peuvent redimensionner un GIF animé :

system("convert big.gif -coalesce coalesce.gif");
system("convert -size 200x100 coalesce.gif -resize 200x10 small.gif");

Méthode de la bibliothèque GD :

Pour les utilisateurs PHP sans accès à ImageMagick, le redimensionnement des GIF animés implique plusieurs étapes :

1. Détecter le type d'image :
Déterminez si l'image est un GIF animé à l'aide de GD.

2. Diviser en images :
Séparez le GIF en images individuelles à l'aide d'une bibliothèque GD ou d'une classe tierce.

3. Redimensionner les cadres :
Redimensionnez chaque cadre individuel à l'aide des fonctions de la bibliothèque GD.

4. Recomposite les cadres :
Réassemblez les cadres redimensionnés dans un nouveau GIF animé à l'aide de GD ou d'une bibliothèque spécialisée.

Exemple de code :

// Get image
$sourceGif = imagecreatefromgif("big.gif");

// Determine if animated
if (gdImageAnimationLen($sourceGif) > 1) {
    // Split into frames
    $frames = $frames = gdImageSplitAnimation($sourceGif);

    // Resize frames
    $resizedFrames = [];
    foreach ($frames as $frame) {
        $resizedFrames[] = gdImageScale($frame, $newWidth, $newHeight);
    }

    // Recomposite GIF
    $newGif = $newGif = gdImageCreateAnimatedGif() ;
    foreach ($resizedFrames as $frame) {
        gdImageAddGif($newGif, $frame);
    }

    // Output GIF
    imagegif($newGif, "small.gif");
}

Remarque que cette méthode peut produire une taille de fichier plus grande en raison du processus de fusion et de désoptimisation. Si les performances sont un problème, envisagez plutôt d'utiliser ImageMagick.

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