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 )
?>
Fonctions GD et images
Sommaire
- gd_info — Retourne des informations à propos de la bibliothèque GD installée
- getimagesize — Retourne la taille d'une image
- getimagesizefromstring — Récupère la taille d'une image depuis une chaîne
- 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 — Affichage de l'image vers le navigateur ou dans un fichier
- imageaffine — Return an image containing the affine tramsformed src image, using an optional clipping area
- imageaffinematrixconcat — Concat two matrices (as in doing many ops in one go)
- imageaffinematrixget — Return an image containing the affine tramsformed src image, using an optional clipping area
- 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 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 le 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 depuis un fichier ou une URL
- imagecreatefromjpeg — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatefrompng — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatefromstring — Crée une image à partir d'une chaîne
- imagecreatefromwbmp — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatefromwebp — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatefromxbm — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatefromxpm — Crée une nouvelle image depuis un fichier ou une URL
- imagecreatetruecolor — Crée une nouvelle image en couleurs vraies
- imagecrop — Crop an image using the given coordinates and size, x, y, width and height
- imagecropauto — Crop an image automatically using one of the available modes
- imagedashedline — Dessine une ligne pointillée
- imagedestroy — Détruit une image
- imageellipse — Dessine une ellipse
- imagefill — Remplissage
- imagefilledarc — Dessine un arc partiel et le 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
- imageflip — Retourne une image en utilisant le mode fourni
- 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 — Écrit du texte dans une image avec la police courante FreeType 2
- imagegammacorrect — Applique une correction gamma à l'image GD
- 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 — Affichage de l'image vers le navigateur ou dans un fichier
- imagegrabscreen — Capture l'écran complet
- imagegrabwindow — Capture une fenêtre
- imageinterlace — Active ou désactive l'entrelacement
- imageistruecolor — Détermine si une image est une image truecolor
- imagejpeg — Affichage de l'image vers le navigateur ou dans 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
- imagepalettetotruecolor — Convertit une image basée sur une palette en couleur vraie
- 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 — Étend 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
- imagescale — Scale an image using the given new width and height
- imagesetbrush — Modifie la brosse pour le dessin des lignes
- imagesetinterpolation — Set the interpolation method
- 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 couleurs vraies 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 — Affichage de l'image vers le navigateur ou dans un fichier
- imagewebp — Affiche une image WebP vers un navigateur ou un fichier
- 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 et recherche les balises simples
- jpeg2wbmp — Convertit une image JPEG en image WBMP
- png2wbmp — Convertit une image PNG en image WBMP
felipensp at gmail dot com ¶
7 years ago
dev at kingthief dot com ¶
5 years ago
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 ¶
5 years ago
<?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 ¶
7 years ago
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).
peter dot hulstaert at gmail dot com ¶
7 years ago
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 ¶
7 years ago
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 ¶
7 years ago
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 ¶
7 years ago
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 ¶
9 years ago
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/
chuckstudios at gmail dot com ¶
4 years ago
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;
}
}
?>
ingo at jache dot de ¶
1 year ago
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();
?>
sellout at NoSpAm dot dharmadevil dot com ¶
10 years ago
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');
?>
