XLI. Images

Introduction

PHP ne se limite pas à la génération de pages HTML. Il peut aussi servir à créer et manipuler des images, dans un grand choix de formats, comme gif, png, jpg, wbmp et xpm. Et même, PHP peut générer directement des images pour le navigateur, avec la librarie GD. GD et PHP auront aussi besoin d'autres librairies, en fonction des formats que vous souhaitez utiliser.

Vous pouvez utiliser les fonctions PHP pour obtenir les tailles des images aux formats JPEG, GIF, PNG, SWF, TIFF et JPEG2000.

Note : Lisez la sections sur les pré-requis pour savoir comment améliorer les possibilités le lecture, modification et écriture d'images, ainsi que les possibilités de lecture d'images prises par des appareils numériques.

Pré-requis

Si vous disposez de la librairie GD (disponible à http://www.boutell.com/gd/) vous pourrez aussi créer et manipuler ces images.

Les formats des images que vous pourrez manipuler dépendent de la version de GD que vous installerez, et de toute autre librairie dont GD a besoin pour traiter à ces images. Les versions antérieures à la version 1.6 supportent le GIF, mais pas le PNG. Pour les versions plus récentes, c'est le contraire.

Note : Depuis PHP 4.3, il existe une version de GD qui est distribuée avec PHP. Cette version contient des fonctionnalités supplémentaires, comme les canaux alpha, et il est recommandé de l'utiliser de préférence à la librairie externe, car elle est mieux supportée, et bien plus stable.

Vous pouvez aussi améliorer GD en lui ajoutant des formats d'images supplémentaires.

Tableau 1. Formats d'images supportés

Format d'imageLibrairie à téléchargerNotes
gif  Uniquement supporté en versions de GD antérieure à gd-1.6. Le support des images GIF est disponible en lecture seule depuis PHP 4.3.0, et dans la version de la librairie qui est fournie avec la distribution de PHP.
jpeg-6bftp://ftp.uu.net/graphics/jpeg/ 
pnghttp://www.libpng.org/pub/png/libpng.html Uniquement supporté avec GD plus récente que gd-1.6.
xpmftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html Il est probable que vous ayez déjà cette librairie disponible si votre système dispose d'un environnement X.

Vous pouvez aussi améliorer GD en lui ajoutant des fonctionalités de manipulation de polices. Les librairies suivantes sont supportées :

Tableau 2. Supported font libraries

Librarie de policeTéléchargementNotes
FreeType 1.xhttp://www.freetype.org/ 
FreeType 2http://www.freetype.org/ 
T1libftp://sunsite.unc.edu/pub/Linux/libs/graphics/) Support des polices de Type 1.

Si vous avez compilé PHP avec l'option --enable-exif vous serez capable d'accéder aux données stockées dans les entêtes des images JPEG et TIFF. De cette façon, vous pouvez lire les méta données générées par les appareils numériques. Ces fonctions ne requièrent par la librairie GD.

Note : PHP ne requiert aucune librairie supplémentaire pour gérer les données EXIF.

Installation

Pour activer le support de GD, vous devez compiler PHP avec l'option --with-gd[=DIR], où DIR est le dossier d'installation de GD. Il est recommandé d'utiliser la version de GD qui est distribué avec PHP, en utilisant simplement l'option --with-gd.

Augmentez les possibilités des GD de gérer d'autres formats d'images en spécifiant les options de compilations suivantes :

Tableau 3. Formats d'image supportés

Format d'imageOption de compilation
jpeg-6b Pour activer le support de la librairie JPEG-6b, ajouter l'option --with-jpeg-dir=DIR.
png Pour activer le support de la librairie PNG, ajouter l'option --with-png-dir=DIR. Notez que libpng requiert la librairie zlib, et donc, il vous faudra ajouter aussi --with-zlib-dir[=DIR] dans votre ligne de compilation.
xpm Pour activer le support de la librairie XPM, ajoutez l'option --with-xpm-dir=DIR. Si le script de compilation n'est pas capable de trouver les librairies nécessaires, il vous faudra ajouter le chemin vers les librairies X11.

Augmentez les possibilités de GD pour qu'elle manipule différentes types de polices de caractères en ajoutant les options de compilations suivantes :

Tableau 4. Librairies des polices de caractères supportées

LibrairieOption de configuration
FreeType 1.x Pour activer le support de FreeType 1.x, ajoutez l'option --with-ttf[=DIR].
FreeType 2 Pour activer le support de FreeType 2, ajoutez l'option --with-freetype-dir=DIR.
T1lib Pour activer le support de T1lib (Type 1 fonts), ajoutez l'option --with-t1lib[=DIR].
Native TrueType string function Pour activer le support des chaînes de caractères TrueType, ajoutez l'option --enable-gd-native-ttf.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Exif supporte automatiquement la conversion en Unicode et JIS pour les commentaires des utilisateurs, lorsque le module mbstring est disponible. Cela se fait en décodant le commentaire avec le bon jeu de caractères. Le résultat peut alors être encodé dans le jeu de caractères de votre serveur HTTP.

Tableau 5. Options de configuration

NomPar défautModifiable
exif.encode_unicode"ISO-8859-15"PHP_INI_ALL
exif.decode_unicode_motorola"UCS-2BE"PHP_INI_ALL
exif.decode_unicode_intel"UCS-2LE"PHP_INI_ALL
exif.encode_jis""PHP_INI_ALL
exif.decode_jis_motorola"JIS"PHP_INI_ALL
exif.decode_jis_intel"JIS"PHP_INI_ALL
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à ini_set().

Voici de détails sur les directives de configuration.

exif.encode_unicode string

exif.encode_unicode définit le jeu de caractères UNICODE utilisé pour les commentaires. Par défaut, c'est ISO-8859-15, qui devrait fonctionner pour les pays non asiatiques. Cette option peut être vide, ou bien contenir un jeu de caractères qui est supporté par mbstring. Si cette option est vide, la configuration de mbstring sera utilisée.

exif.decode_unicode_motorola string

exif.decode_unicode_motorola définit le jeu de caractères interne pour les utilisateurs Unicode, si le commentaire de l'image est en big-endian (ordre de motorola). Cette option ne peut être vide, mais vous pouvez y spécifier une liste de jeux de caractères utilisés par mbstring. Par défaut, c'est UCS-2BE.

exif.decode_unicode_intel string

exif.decode_unicode_intel définit le jeu de caractères interne pour les utilisateurs Unicode, si le commentaire de l'image est en little-endian (ordre d'intel). Cette option ne peut être vide, mais vous pouvez y spécifier une liste de jeux de caractères utilisés par mbstring. Par défaut, c'est UCS-2LE.

exif.encode_jis string

exif.encode_jis définit le jeux de caractères pour les commentaires en JIS. Par défaut, c'est une valeur vide, ce qui force la fonction à utiliser le jeu de caractères interne de mbstring.

exif.decode_jis_motorola string

exif.decode_jis_motorola définit le jeu de caractères interne pour les utilisateurs JIS, si le commentaire de l'image est en big-endian (ordre de motorola). Cette option ne peut être vide, mais vous pouvez y spécifier une liste de jeux de caractères utilisés par mbstring. Par défaut, c'est JIS.

exif.decode_jis_intel string

exif.decode_jis_intel définit le jeu de caractères interne pour les utilisateurs JIS, si le commentaire de l'image est en little-endian (ordre d'intel). Cette option ne peut être vide, mais vous pouvez y spécifier une liste de jeux de caractères utilisés par mbstring. Par défaut, c'est JIS.

Types de ressources

Cette extension ne définit aucune ressource.

Constantes Prédefinies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

IMG_GIF (entier)

IMG_JPG (entier)

IMG_JPEG (entier)

IMG_PNG (entier)

IMG_WBMP (entier)

IMG_XPM (entier)

IMG_COLOR_TILED (entier)

IMG_COLOR_STYLED (entier)

IMG_COLOR_BRUSHED (entier)

IMG_COLOR_STYLEDBRUSHED (entier)

IMG_COLOR_TRANSPARENT (entier)

IMG_ARC_ROUNDED (entier)

IMG_ARC_PIE (entier)

IMG_ARC_CHORD (entier)

IMG_ARC_NOFILL (entier)

IMG_ARC_EDGED (entier)

IMAGETYPE_GIF (entier)

IMAGETYPE_JPG (entier)

IMAGETYPE_PNG (entier)

IMAGETYPE_SWF (entier)

IMAGETYPE_PSD (entier)

IMAGETYPE_BMP (entier)

IMAGETYPE_TIFF_II (entier)

IMAGETYPE_TIFF_MM (entier)

IMAGETYPE_JPC (entier)

IMAGETYPE_JP2 (entier)

IMAGETYPE_JPX (entier)

IMAGETYPE_SWC (entier)

Exemples

Exemple 1. Création d'une image PNG avec PHP

<?php
    header("Content-type: image/png");
    $string = $_GET['text'];
    $im     = imagecreatefrompng("images/button1.png");
    $orange = imagecolorallocate($im, 220, 210, 60);
    $px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
    imagestring($im, 3, $px, 9, $string, $orange);
    imagepng($im);
    imagedestroy($im);
?>
Cet exemple doit être appelé depuis une page HTML avec une balise image telle que : <img src="button.php?text">. Le script ci-dessus, button.php, prend la chaîne "text" et l'inscrit sur le fond d'image appelée "images/button1.png" et l'affiche. C'est une méthode très pratique pour éviter de redessiner un nouveau bouteau, dès que vous changez le texte d'un bouton. De cette façon, les boutons sont dynamiquement générés.

Table des matières
exif_imagetype -- Détermine le type d'une image
exif_read_data -- Lit les entêtes EXIF des images JPEG et TIFF
exif_thumbnail -- Récupère la miniature d'une image TIFF ou JPEG
gd_info -- Retrieve information about the currently installed GD library
getimagesize -- Retourne la taille d'une image
image_type_to_mime_type -- Lit le Mime-Type d'un type d'image
image2wbmp -- Crée une image WBMP
ImageAlphaBlending -- Modifie le mode de blending d'une image
ImageArc -- Dessine une ellipse partielle
ImageChar -- Dessine un caractère horizontalement
ImageCharUp -- Dessine un caractère verticalement
ImageColorAllocate -- Alloue une couleur pour une image
imagecolorallocatealpha -- Allocate a color for an image
ImageColorAt -- Retourne l'index de la couleur d'un pixel donné
ImageColorClosest --  Retourne l'index de la couleur la plus proche d'une couleur donnée.
ImageColorClosestAlpha --  Retourne la couleur la plus proche, en tenant compte du canal alpha
imagecolorclosesthwb --  Lit l'index de la couleur la plus proche d'une couleur spécifiée avec sa teinte, blanc et noir (hue, white and blackness)
ImageColorDeAllocate --  Désalloue une couleur pour une image
ImageColorExact -- Retourne l'index de la couleur donnée
ImageColorExactAlpha -- Retourne l'index d'une couleur avec son canal alpha
ImageColorResolve --  Retourne l'index de la couleur donnée, ou la plus proche possible.
ImageColorResolveAlpha --  Retourne un index de couleur ou son alternative la plus proche, y compris le canal alpha
ImageColorSet --  Change la couleur dans une palette à l'index donné.
ImageColorsForIndex -- Retourne la couleur associée à un index
ImageColorsTotal -- Calcule le nombre de couleurs d'une palette
ImageColorTransparent -- Définit la couleur transparente
ImageCopy --  Copie une partie d'une image
ImageCopyMerge --  Copie et fusionne une partie d'une image
ImageCopyMergeGray --  Copie et fusionne une partie d'une image en niveaux de gris
ImageCopyResampled -- Copie, redimensionne, rééchantillonne une image
ImageCopyResized -- Copie et redimensionne une partie d'une image
ImageCreate -- Crée une nouvelle image à palette
imagecreatefromgd2 -- Crée une nouvelle image à partir d'un fichier GD2 ou d'une URL
imagecreatefromgd2part -- Crée une nouvelle image à partir d'une partie de fichier GD2 ou d'une URL
imagecreatefromgd -- Crée une nouvelle image à partir d'un fichier GD ou d'une URL
imagecreatefromgif --  Crée une nouvelle image à partir d'un fichier ou d'une URL.
ImageCreateFromJPEG --  Crée une nouvelle image JPEG à partir d'un fichier ou d'une URL
ImageCreateFromPNG --  Crée une nouvelle image PNG à partir d'un fichier ou d'une URL
ImageCreateFromString -- Crée une image à partir d'une chaîne
ImageCreateFromWBMP -- Crée une image depuis un fichier WBMP
ImageCreateFromXBM -- Crée une image à partir d'un fichier XBM
ImageCreateFromXPM -- Crée une image à partir d'un fichier XPM
ImageCreateTrueColor -- Crée une nouvelle image en vraies couleurs
ImageDashedLine -- Dessine une ligne pointillée
ImageDestroy -- détruit une image
ImageEllipse -- Dessine une ellipse
ImageFill -- Remplit
imagefilledarc -- Dessine une ellipse partielle et la remplit
ImageFilledEllipse -- Dessine une ellipse pleine
ImageFilledPolygon -- Dessine un polygone rempli
ImageFilledRectangle -- Dessine un rectangle rempli
ImageFillToBorder -- Remplit avec une région avec une couleur spécifique
ImageFontHeight -- Retourne la hauteur de la police
ImageFontWidth -- Retourne la largeur de la police
imageftbbox -- Calcule le rectangle d'encadrement pour un texte, en utilisant la police courante et freetype2
imagefttext -- Ecrit du texte dans une image avec la police courante et FreeType 2
ImageGammaCorrect --  Applique une correction gamma à l'image
imagegd2 -- Génère une image au format GD2, vers le navigateur ou un fichier
imagegd -- Génère une image au format GD, vers le navigateur ou un fichier
ImageGif -- Envoie une image GIF vers un navigateur ou un fichier
ImageInterlace -- Active ou désactive l'entrelacement
imageistruecolorcreate -- Finds whether an image is a truecolor image.
ImageJPEG --  Envoie une image JPEG vers un navigateur ou un fichier.
ImageLine -- Dessine une ligne
ImageLoadFont -- Charge une nouvelle police
ImagePaletteCopy -- Copie la palette d'une image à l'autre
ImagePNG --  Envoie une image PNG vers un navigateur ou un fichier.
ImagePolygon -- Dessine un polygone
ImagePSBBox --  Retourne le rectangle entourant un texte et dessiné avec une police PostScript Type1.
imagepscopyfont --  Fait une copie d'une police chargée pour modification ultérieure.
ImagePSEncodeFont --  Change le codage vectoriel d'un caractère dans une police.
ImagePsExtendFont --  Etend ou condense une police de caractères
ImagePSFreeFont --  Libère la mémoire occupée par une police PostScript Type 1.
ImagePSLoadFont -- Charge une police PostScript Type 1 depuis un fichier
ImagePsSlantFont --  Incline une police de caractères
ImagePSText -- Dessine un texte sur une image avec une police PostScript Type1
ImageRectangle -- Dessine un rectangle
imagerotate -- Fait tourner une image d'un angle
imagesavealpha -- Set the flag to save full alpha channel information (as opposed to single-color transparency) when saving PNG images.
imagesetbrush -- Modifie la brosse pour le dessin des lignes
ImageSetPixel -- Dessine un pixel
imagesetstyle -- Configure le style pour le dessin des lignes
ImageSetThickness -- Modifie l'épaisseur d'un trait
ImageSetTile -- Modifie l'image utilisée pour le carrelage
ImageString -- Dessine une chaîne horizontale
ImageStringUp -- Dessine une chaîne verticale
ImageSX -- Retourne la largeur d'une image
ImageSY -- Retourne la hauteur de l'image
ImageTrueColorToPalette -- Convertit une image en vraies couleurs en image à palette
ImageTTFBBox --  Retourne le rectangle entourant un texte et dessiné avec une police TrueType.
ImageTTFText -- Dessine un texte avec une police TrueType
ImageTypes --  Retourne les types d'images supportés par la version courante de PHP
ImageWBMP -- Affiche une image WBMP
iptcembed -- Intègre des données binaires IPTC dans une image JPEG
iptcparse --  Analyse un bloc binaire IPTC http://www.iptc.org/ et recherche les balises simples.
JPEG2WBMP -- Convertit une image JPEG en image WBMP
PNG2WBMP -- Convertit une image PNG en image WBMP
read_exif_data -- Lit les en-têtes EXIF d'une image JPEG