Dans PHP, nous pouvons utiliser la bibliothèque GD pour traiter les images, y compris la génération de vignettes. La fonction ImageColorAllocatEalpha nous aide à attribuer des couleurs transparentes aux images transparentes. Ensuite, nous allons étape par étape comment utiliser cette fonction pour créer des miniatures pour les images transparentes.
Tout d'abord, assurez-vous que la bibliothèque GD est activée dans votre environnement PHP. Vous pouvez vérifier si la bibliothèque GD est activée par:
php -m | grep gd
Si la bibliothèque GD n'est pas installée, installez-la avec la commande appropriée (par exemple, en utilisant Sudo apt-get, installez php-gd dans Ubuntu).
Pour créer une miniature pour une image transparente, vous devez d'abord charger l'image d'origine. En supposant que nous traitons d'un fichier PNG ou GIF avec un arrière-plan transparent, nous pouvons utiliser ImageCreateFrommpng ou ImageCreatefromgif pour charger l'image.
$image = imagecreatefrompng('example.png');
Cela chargera le fichier exemple.png situé dans le répertoire actuel.
Afin de générer la vignette, nous devons créer une nouvelle toile d'image et nous assurer qu'elle a un arrière-plan transparent. Pour assurer la transparence, nous devons d'abord définir l'arrière-plan transparent correct et attribuer des couleurs transparentes en utilisant l'imageColorallocatealpha .
// Obtenez la largeur et la hauteur de l'image d'origine
$width = imagesx($image);
$height = imagesy($image);
// Réglez la largeur et la hauteur de la vignette
$new_width = 100;
$new_height = 100;
// Créer une nouvelle toile d'image,et défini comme arrière-plan transparent
$thumb = imagecreatetruecolor($new_width, $new_height);
// Attribuer des couleurs à des arrière-plans transparents
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127); // 0, 0, 0 C'est noir,127 Indique une transparence complète
imagefill($thumb, 0, 0, $transparent);
// Activer la transparence de l'image
imagesavealpha($thumb, true);
Dans ce code, ImageColorAllocatealpha ($ thumb, 0, 0, 0, 127) est utilisé pour attribuer des couleurs d'arrière-plan transparentes aux miniatures, où 127 représente la transparence complète.
Ensuite, nous utilisons la fonction ImageCopy Res échantillonnée pour mettre à l'échelle l'image d'origine sur la nouvelle toile.
// Échelle et copiez l'image d'origine sur la toile miniature
imagecopyresampled($thumb, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
Une fois la vignette générée, vous pouvez choisir de l'enregistrer dans un fichier ou de le sortir directement au navigateur.
// Enregistrer les miniatures en tant que fichier
imagepng($thumb, 'thumb_example.png');
// Ou sortir directement vers le navigateur
header('Content-Type: image/png');
imagepng($thumb);
// Nettoyez la mémoire
imagedestroy($image);
imagedestroy($thumb);
Voici un exemple de code complet:
<?php
// Chargez l'image d'origine
$image = imagecreatefrompng('example.png');
// Obtenez la largeur et la hauteur de l'image d'origine
$width = imagesx($image);
$height = imagesy($image);
// Réglez la largeur et la hauteur de la vignette
$new_width = 100;
$new_height = 100;
// Créer une nouvelle toile d'image,et défini comme arrière-plan transparent
$thumb = imagecreatetruecolor($new_width, $new_height);
// Attribuer des couleurs à des arrière-plans transparents
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127); // 0, 0, 0 C'est noir,127 Indique une transparence complète
imagefill($thumb, 0, 0, $transparent);
// Activer la transparence de l'image
imagesavealpha($thumb, true);
// Échelle et copiez l'image d'origine sur la toile miniature
imagecopyresampled($thumb, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Enregistrer les miniatures en tant que fichier
imagepng($thumb, 'thumb_example.png');
// Ou sortir directement vers le navigateur
// header('Content-Type: image/png');
// imagepng($thumb);
// Nettoyez la mémoire
imagedestroy($image);
imagedestroy($thumb);
?>