downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

gd_info> <iis_stop_service
[edit] Last updated: Mon, 01 Nov 2010

view this page in

LXII. 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, JPEG, WBMP et XPM. Et PHP peut même générer directement des images pour le navigateur, avec la bibliothèque GD. GD et PHP auront aussi besoin d'autres bibliothèques, 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 section sur les pré-requis pour savoir comment améliorer les possibilités de 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 bibliothèque GD (disponible à http://www.boutell.com/gd/) vous pourrez aussi créer et manipuler des images.

Les formats des images que vous pourrez manipuler dépendent de la version de GD que vous installerez, et de toutes autres bibliothèques dont GD a besoin pour traiter ces images. Les versions antérieures à la version 1.6 supportent le GIF, mais pas le PNG. À partir des version de GD supérieures à 1.6 et inférieures à 2.0.28, c'est le contraire. Le support du GIF a été rajouté à partir de la verison 2.0.28.

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 bibliothèque externe, car elle est mieux supportée, et bien plus stable.

Note : Le support pour GD 1.x a été supprimé à partir de PHP 6.0.0, qui requiert 2.0.33 ou supérieur.

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

Tableau 1. Formats d'images supportés

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

Vous pouvez aussi améliorer GD en lui ajoutant des fonctionnalités de manipulation de polices. Les bibliothèques suivantes sont supportées :

Tableau 2. Bibliothèques de polices supportées

Bibliothèque de policeTéléchargementNotes
FreeType 1.xhttp://www.freetype.org/ 
FreeType 2http://www.freetype.org/Le support a été supprimé à partir de PHP 6.0.0
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 en-tê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 pas la bibliothèque GD.

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ée avec PHP, en utilisant simplement l'option --with-gd. La bibliothèque GD requiert libpng et libjpeg pour compiler.

Sous Windows, vous devez inclure la bibliothèque php_gd2.dll comme extension dans le fichier php.ini. La bibliothèque php_gd.dll a été supprimée de PHP 4.3.2. Notez aussi que les fonctions conseillées truecolor, comme imagecreatetruecolor(), requièrent GD2.

Note : Pour activer le support exif sur Windows, php_mbstring.dll doit être chargée avant php_exif.dll dans le php.ini.

Pour désactiver le support de GD en PHP 3, ajoutez simplement l'option --without-gd dans votre ligne de configuration.

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

Tableau 3. Formats d'image supportés

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

Note : Lorsque vous compilez PHP avec libpng, vous devez utiliser la même version que celle liée à la bibliothèque GD.

Augmentez les possibilités de GD pour qu'elle manipule différents types de polices de caractères en ajoutant les options --with-XXXX de compilation suivantes :

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

BibliothèqueOption 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].
Chaînes TrueType Pour activer le support des chaînes de caractères TrueType, ajoutez l'option --enable-gd-native-ttf.

Configuration à l'exécution

Il n'y a pas de configuration spécifique pour les images mais vous êtes peut être intéressé par les directives de l'extension exif.

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

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_JPEG (entier)

IMAGETYPE_PNG (entier)

IMAGETYPE_SWF (entier)

IMAGETYPE_PSD (entier)

IMAGETYPE_BMP (entier)

IMAGETYPE_WBMP (entier)

IMAGETYPE_XBM (entier)

IMAGETYPE_TIFF_II (entier)

IMAGETYPE_TIFF_MM (entier)

IMAGETYPE_IFF (entier)

IMAGETYPE_JB2 (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 "texte" et l'inscrit sur le fond d'image appelé "images/button1.png", puis l'affiche. C'est une méthode très pratique pour éviter de redessiner un nouveau bouton, dès que vous changez son texte. De cette façon, ils sont générés dynamiquement.

Table des matières
gd_info --  Retourne des informations à propos de la bibliothèque GD installée
getimagesize -- Retourne la taille d'une image
image_type_to_extension --  Retourne l'extension du fichier pour le type d'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
imageantialias --  Utiliser ou non les fonctions d'antialias
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 -- Alloue une couleur à une 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
imagecolordeallocate -- Supprime une couleur d'une image
imagecolorexact -- Retourne l'index de la couleur donnée
imagecolorexactalpha -- Retourne l'index d'une couleur avec son canal alpha
imagecolormatch --  Fait correspondre un peu plus les couleurs de la version palette d'une image aux couleurs de sa version truecolor
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
imageconvolution --  Applique une matrice de la convolution 3x3, en utilisant la division de coefficient et l'excentrage
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 nouvelle image WBMP à partir d'un fichier ou d'une URL
imagecreatefromxbm --  Crée une nouvelle image XBM à partir d'un fichier ou d'une URL
imagecreatefromxpm --  Crée une nouvelle image XPM à partir d'un fichier ou d'une URL
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 une région avec une couleur spécifique
imagefilter --  Applique un filtre à une image
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 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
imageistruecolor -- Détermine si une image est une image truecolor
imagejpeg --  Envoie une image JPEG vers un navigateur ou un fichier
imagelayereffect --  Active l'option d'alpha blending, pour utiliser les effets de libgd
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
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 PostScript
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 --  Configure l'enregistrement des informations complètes du canal alpha lors de sauvegardes d'images PNG
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
imagexbm --  Génère une image au format XBM
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


gd_info> <iis_stop_service
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Images
ingo at jache dot de 14-Oct-2011 03:16
I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn't give a good blur.

The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It's still quite slow.

<?php

   
function blurImage($srcimg,$blur)
    {
       
$blur = $blur*$blur;
       
$blur = max(0,min(1,$blur));
   
       
$srcw = imagesx($srcimg);
       
$srch = imagesy($srcimg);
       
       
$dstimg = imagecreatetruecolor($srcw,$srch);
   
       
$f1a = $blur;
       
$f1b = 1.0 - $blur;

   
       
$cr = 0; $cg = 0; $cb = 0;
       
$nr = 0; $ng = 0; $nb = 0;

       
$rgb = imagecolorat($srcimg,0,0);
       
$or = ($rgb >> 16) & 0xFF;
       
$og = ($rgb >> 8) & 0xFF;
       
$ob = ($rgb) & 0xFF;

       
//-------------------------------------------------
        // first line is a special case
        //-------------------------------------------------
       
$x = $srcw;
       
$y = $srch-1;
        while (
$x--)
        {
           
//horizontal blurren
           
$rgb = imagecolorat($srcimg,$x,$y);
           
$cr = ($rgb >> 16) & 0xFF;
           
$cg = ($rgb >> 8) & 0xFF;
           
$cb = ($rgb) & 0xFF;
   
           
$nr = ($cr * $f1a) + ($or * $f1b);
           
$ng = ($cg * $f1a) + ($og * $f1b);
           
$nb = ($cb * $f1a) + ($ob * $f1b);   

           
$or = $nr;
           
$og = $ng;
           
$ob = $nb;
           
           
imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
        }
       
//-------------------------------------------------

        //-------------------------------------------------
        // now process the entire picture
        //-------------------------------------------------
       
$y = $srch-1;
        while (
$y--)
        {

           
$rgb = imagecolorat($srcimg,0,$y);
           
$or = ($rgb >> 16) & 0xFF;
           
$og = ($rgb >> 8) & 0xFF;
           
$ob = ($rgb) & 0xFF;

           
$x = $srcw;
            while (
$x--)
            {
               
//horizontal
               
$rgb = imagecolorat($srcimg,$x,$y);
               
$cr = ($rgb >> 16) & 0xFF;
               
$cg = ($rgb >> 8) & 0xFF;
               
$cb = ($rgb) & 0xFF;
               
               
$nr = ($cr * $f1a) + ($or * $f1b);
               
$ng = ($cg * $f1a) + ($og * $f1b);
               
$nb = ($cb * $f1a) + ($ob * $f1b);   
   
               
$or = $nr;
               
$og = $ng;
               
$ob = $nb;
               
               
               
//vertical
               
$rgb = imagecolorat($dstimg,$x,$y+1);
               
$vr = ($rgb >> 16) & 0xFF;
               
$vg = ($rgb >> 8) & 0xFF;
               
$vb = ($rgb) & 0xFF;
               
               
$nr = ($nr * $f1a) + ($vr * $f1b);
               
$ng = ($ng * $f1a) + ($vg * $f1b);
               
$nb = ($nb * $f1a) + ($vb * $f1b);   
   
               
$vr = $nr;
               
$vg = $ng;
               
$vb = $nb;
               
               
imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
            }
       
        }
       
//-------------------------------------------------
       
return $dstimg;       

    }

   
   
$srcimg = imagecreatefromjpeg("test.jpg");
   
$dstimg = blurImage($srcimg,0.2);

   
header('Content-type: image/jpeg');
    echo(
imagejpeg($dstimg) );
    exit();
   
   
?>
chuckstudios at gmail dot com 25-Nov-2008 09:18
I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:

<?php
   
function imagepgm($image, $filename = null)
    {
       
$pgm = "P5 ".imagesx($image)." ".imagesy($image)." 255\n";
        for(
$y = 0; $y < imagesy($image); $y++)
        {
            for(
$x = 0; $x < imagesx($image); $x++)
            {
               
$colors = imagecolorsforindex($image, imagecolorat($image, $x, $y));
               
$pgm .= chr(0.3 * $colors["red"] + 0.59 * $colors["green"] + 0.11 * $colors["blue"]);
            }
        }
        if(
$filename != null)
        {
           
$fp = fopen($filename, "w");
           
fwrite($fp, $pgm);
           
fclose($fp);
        }
        else
        {
            return
$pgm;
        }
    }
?>
dev at kingthief dot com 28-Mar-2008 08:20
I've developed a well-documented, fairly rock-solid API for creating on the fly, anti-aliased, rounded corner images, including full alpha transparency support for all you PNG lovers.

go here to download the package:
http://sourceforge.net/projects/roundedphp/

go here for a live demo:
http://dev.kingthief.com/demos/roundedphp/

Installation is similar to PEAR.

Enjoy!
ph_corp at yahoo dot fr 23-Dec-2007 03:19
<?php

/**
HSL/RGB conversion functions
very useful for a lot of applications
**/

function RBGtoHSL ( $R, $G, $B )
{

   
$var_R = ( $R / 255 );
   
$var_G = ( $G / 255 );
   
$var_B = ( $B / 255 );

   
$var_Min = min( $var_R, $var_G, $var_B )
   
$var_Max = max( $var_R, $var_G, $var_B )
   
$del_Max = $var_Max - $var_Min

    $L
= ( $var_Max + $var_Min ) / 2;

    if (
$del_Max == 0 )
    {
      
$H = 0
       $S
= 0
   
}
    else
    {
        if (
$L < 0.5 )
        {
           
$S = $del_Max / ( $var_Max + $var_Min );
        }
        else
        {
           
$S = $del_Max / ( 2 - $var_Max - $var_Min );
        }

       
$del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
       
$del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
       
$del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;

        if (
$var_R == $var_Max )
        {
           
$H = $del_B - $del_G;
        }
        else if (
$var_G == $var_Max )
        {
           
$H = ( 1 / 3 ) + $del_R - $del_B;
        }
        else if (
$var_B == $var_Max )
        {
           
$H = ( 2 / 3 ) + $del_G - $del_R;
        }

        if (
$H < 0 )
        {
           
$H += 1;
        }
        if (
$H > 1 )
        {
           
$H -= 1
       
}

    }

    return array(
$H, $S, $L );

}

function
HuetoRGB( $v1, $v2, $vH )
{
    if (
$vH < 0 )
    {
       
$vH += 1;
    }
    if (
$vH > 1 )
    {
       
$vH -= 1;
    }
    if ( (
6 * $vH ) < 1 )
    {
        return (
$v1 + ( $v2 - $v1 ) * 6 * $vH );
    }
    if ( (
2 * $vH ) < 1 )
    {
        return (
$v2 );
    }
    if ( (
3 * $vH ) < 2 )
    {
        return (
$v1 + ( $v2 - $v1 ) * ( ( 2 / 3 ) - $vH ) * 6 );
    }
    return (
$v1 )
}

function
HSLtoRGB ( $H, $S, $L )
{

    if (
$S == 0 )
    {
       
$R = $L * 255;
       
$G = $L * 255;
       
$B = $L * 255;
    }
    else
    {
        if (
$L < 0.5 )
        {
           
$var_2 = $L * ( 1 + $S );
        }
        else
        {
           
$var_2 = ( $L + $S ) - ( $S * $L );
        }

       
$var_1 = 2 * $L - $var_2;

       
$R = 255 * HuetoRGB( $var_1, $var_2, $H + ( 1 / 3 ) );
       
$G = 255 * HuetoRGB( $var_1, $var_2, $H );
       
$B = 255 * HuetoRGB( $var_1, $var_2, $H - ( 1 / 3 ) );
    }

    return array(
$R, $G, $B );

}

function
distance ( $R1, $G1, $B1, $R2, $G2, $B2 )
{
   
$result = sqrt ( ( $R1 - $R2 )*( $R1 - $R2 ) + ( $G1 - $G2 )*( $G1 - $G2 ) + ( $B1 - $B2 )*( $B1 - $B2 ) );
    return (
$result );
}

?>
shd at earthling dot net 28-Mar-2006 04:44
If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:

<?php
function imagebmp ($im, $fn = false)
{
    if (!
$im) return false;
           
    if (
$fn === false) $fn = 'php://output';
   
$f = fopen ($fn, "w");
    if (!
$f) return false;
           
   
//Image dimensions
   
$biWidth = imagesx ($im);
   
$biHeight = imagesy ($im);
   
$biBPLine = $biWidth * 3;
   
$biStride = ($biBPLine + 3) & ~3;
   
$biSizeImage = $biStride * $biHeight;
   
$bfOffBits = 54;
   
$bfSize = $bfOffBits + $biSizeImage;
           
   
//BITMAPFILEHEADER
   
fwrite ($f, 'BM', 2);
   
fwrite ($f, pack ('VvvV', $bfSize, 0, 0, $bfOffBits));
           
   
//BITMAPINFO (BITMAPINFOHEADER)
   
fwrite ($f, pack ('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 24, 0, $biSizeImage, 0, 0, 0, 0));
           
   
$numpad = $biStride - $biBPLine;
    for (
$y = $biHeight - 1; $y >= 0; --$y)
    {
        for (
$x = 0; $x < $biWidth; ++$x)
        {
           
$col = imagecolorat ($im, $x, $y);
           
fwrite ($f, pack ('V', $col), 3);
        }
        for (
$i = 0; $i < $numpad; ++$i)
           
fwrite ($f, pack ('C', 0));
    }
   
fclose ($f);
    return
true;
}
?>

It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what's required by ExcelWriter).
felipensp at gmail dot com 12-Mar-2006 09:17
Representation decimal of a color in hexadecimal for use on functions of library GD.

<?php

   
// Representation hexadecimal
   
$var = '#FFFFFF';

    function
getRgbFromGd($color_hex) {

        return
array_map('hexdec', explode('|', wordwrap(substr($color_hex, 1), 2, '|', 1)));

    }
   
   
print_r(getRgbFromGd($var));

   
// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )

?>
peter dot hulstaert at gmail dot com 05-Jan-2006 05:18
While I was searching for a good way to draw a graph, I stumbled on skumar2k15's script.

I have taken the liberty to improve multiple aspects of it.

1. The array can grow and shrink in size, the graph will adjust accordingly.
2. All the values in the array are recalculated so they won't get bigger than the height of the graph.
3. I inserted the possibility to keep a percentage off the height away from the edge.
4. You can adjust the size of the grid.
5. Everything will adjust when you change the height of width.

<?
header
("Content-type: image/png");

// Define variables
$Values=array(50,90,30,155,50,40,320,50,40,86,240,128,650,540,320);
$imgWidth=500;
$imgHeight=200;
$grid=25;
$graphspacing=0.05;

//Creation of new array with hight adjusted values
while (list($key, $val) = each($Values))
    {if(
$val>$max){$max=$val;}}

for (
$i=0; $i<count($Values); $i++){
$graphValues[$i] = $Values[$i] * (($imgHeight*(1-$graphspacing))/$max);
}
// Create image and define colors

$image=imagecreate($imgWidth, $imgHeight);
$colorWhite=imagecolorallocate($image, 255, 255, 255);
$colorGrey=imagecolorallocate($image, 192, 192, 192);
$colorBlue=imagecolorallocate($image, 0, 0, 255);

// Create border around image
imageline($image, 0, 0, 0, $imgHeight, $colorGrey);
imageline($image, 0, 0, $imgWidth, 0, $colorGrey);
imageline($image, $imgWidth-1, 0, $imgWidth-1, $imgHeight-1, $colorGrey);
imageline($image, 0, $imgHeight-1, $imgWidth-1, $imgHeight-1, $colorGrey);

// Create grid
for ($i=1; $i<($imgWidth/$grid); $i++)
    {
imageline($image, $i*$grid, 0, $i*$grid, $imgHeight, $colorGrey);}
for (
$i=1; $i<($imgHeight/$grid); $i++)
    {
imageline($image, 0, $i*$grid, $imgWidth, $i*$grid, $colorGrey);}

// Create line graph
if($imgWidth/$grid>count($graphValues)){$space=$grid;}
else{
$space = $imgWidth/(count($graphValues)-1);}

for (
$i=0; $i<count($graphValues)-1; $i++)
    {
imageline($image, $i*$space, ($imgHeight-$graphValues[$i]), ($i+1)*$space, ($imgHeight-$graphValues[$i+1]), $colorBlue);}

// Output graph and clear image from memory
imagepng($image);
imagedestroy($image);
?>
michal-ok at o2 dot pl 18-Oct-2005 02:29
The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn't make it work on two different servers - trying to sharpen a 413 x 413 image I ended up with "Fatal error: Allowed memory size of 8388608 bytes exhausted" or "Internal Server Error" or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.
mslemko 09-Oct-2005 12:09
For fedora core 4 users that find that the gd library isn't installed, you can issue the command (as root)

# yum install php-gd

it should download and install the gd library. You will need to restart apache... phpinfo() should then tell you "GD Support     enabled".
timeshifting at gmail dot com 24-Aug-2005 03:39
To sharpen an image, rather than using the code below that produces a sharpening filter with php, use the built-in GD function "imageconvolution" which is designed for this purpose. Matrices can be used for sharpening, blurring, edge detection, etc, ala Photoshop.

A sharpening example:

<?php

$sharpenMatrix
= array(-1,-1,-1,-1,16,-1,-1,-1,-1);
$divisor = 8;
$offset = 0;

imageconvolution($myImage, $sharpenMatrix, $divisor, $offset);

?>

Below is some information on building different kinds of matrices. (If you have photoshop (or PSP, GIMP) you can test out your matrices before applying them in PHP)

http://loriweb.pair.com/8udf-basics.html (covers blurs)
http://loriweb.pair.com/8udf-sharpen.html
http://loriweb.pair.com/8udf-edges.html
http://loriweb.pair.com/8udf-emboss.html
jeff at lushmedia dot com 04-Nov-2003 08:52
I wrote an online overview of the image functions that people might find useful. In addition to a general overview of the various function categories and code samples, I have included many interactive examples of the functions, allowing viewers to experiment with the parameters, and seeing the results in real time. The presentation is located at New York PHP
http://www.nyphp.org/content/presentations/GDintro/
sellout at NoSpAm dot dharmadevil dot com 16-Apr-2003 10:06
A fun little function to output UPC-A 11-digit barcodes.
Thanks to barcodeisland.com for the specs.

<?php

function UPCAbarcode($code) {
 
$lw = 2; $hi = 100;
 
$Lencode = array('0001101','0011001','0010011','0111101','0100011',
                  
'0110001','0101111','0111011','0110111','0001011');
 
$Rencode = array('1110010','1100110','1101100','1000010','1011100',
                  
'1001110','1010000','1000100','1001000','1110100');
 
$ends = '101'; $center = '01010';
 
/* UPC-A Must be 11 digits, we compute the checksum. */
 
if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); }
 
/* Compute the EAN-13 Checksum digit */
 
$ncode = '0'.$code;
 
$even = 0; $odd = 0;
  for (
$x=0;$x<12;$x++) {
    if (
$x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; }
  }
 
$code.=(10 - (($odd * 3 + $even) % 10)) % 10;
 
/* Create the bar encoding using a binary string */
 
$bars=$ends;
 
$bars.=$Lencode[$code[0]];
  for(
$x=1;$x<6;$x++) {
   
$bars.=$Lencode[$code[$x]];
  }
 
$bars.=$center;
  for(
$x=6;$x<12;$x++) {
   
$bars.=$Rencode[$code[$x]];
  }
 
$bars.=$ends;
 
/* Generate the Barcode Image */
 
$img = ImageCreate($lw*95+30,$hi+30);
 
$fg = ImageColorAllocate($img, 0, 0, 0);
 
$bg = ImageColorAllocate($img, 255, 255, 255);
 
ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg);
 
$shift=10;
  for (
$x=0;$x<strlen($bars);$x++) {
    if ((
$x<10) || ($x>=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; }
    if (
$bars[$x] == '1') { $color = $fg; } else { $color = $bg; }
   
ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color);
  }
 
/* Add the Human Readable Label */
 
ImageString($img,4,5,$hi-5,$code[0],$fg);
  for (
$x=0;$x<5;$x++) {
   
ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg);
   
ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg);
  }
 
ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg);
 
/* Output the Header and Content. */
 
header("Content-Type: image/png");
 
ImagePNG($img);
}

UPCAbarcode('12345678901');

?>

 
show source | credits | sitemap | contact | advertising | mirror sites