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. Imagens, Funções de

Introdução

O PHP não esta limitado a criar apenas saída em HTML. Ele também pode ser usado para criar e manipular arquivos de imagem em uma diversidade de formatos, incluindo gif, png, jpg, wbmp, e xpm. E ainda mais convenietemente, o PHP pode enviar streams de saída de imagem diratamente para o browser. Você precisará compilar o PHP com a biblioteca GD de imagens de funções para isto funcionar. O PHP e GD também podem requerer outras bibliotecas, dependendo dos formatos de imagens com os quais você queira trabalhar.

Você pode usar as funções de imagem no PHP para obter o tamanho de imagens JPEG, GIF, PNG, SWF, TIFF and JPEG2000.

Nota: Leia a seção sobre requerimentos sobre como expandir as capacidades de imagem para ler, escrever e modificar imagens e para ler meta dados de fotos tiradas por cameras digitais.

Dependências

Se você tiver a biblioteca GD (disponível em http://www.boutell.com/gd/) você poderá também criar e manipular imagens.

O formato das imagens que você pode manipilar dependem da versão da GD que você instalou, e de quaisquer outras bibliotecas que o GD possa precisar para acessar estes formatos de imagens. Versões do GD anteriores a gd-1.6 suportam imagens GIF, e não suportam PNG, enquanto versões posteriores a gd-1.6 suportam PNG, não GIF.

Nota: Apartir do PHP 4.3 existe uma versão empacotada da biblioteca GD. Esta versão empacotada tem algumas melhorias como alpha blending, e deve ser usada em preferência da biblioteca externa, já que seu código-fonte é melhor mantido e mais estável.

Você pode querer melhorar o GD para manipular mais formatos de imagens.

Tabela 1. Formatos de imagens suportados

Formato da imagensBiblioteca para baixarNotas
gif  Suportado apenas em versões do GD anteriores a gd-1.6. Suporte Apenas para leitura esta disponível com o PHP 4.3.0 e a biblioteca GD empacotada. Suporte para Escrita esta disponível desde o PHP 4.3.9 e PHP 5.0.1.
jpeg-6bftp://ftp.uu.net/graphics/jpeg/ 
pnghttp://www.libpng.org/pub/png/libpng.html Apenas suportados em versões do GD maiores do que gd-1.6.
xpmftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html É provavel que você já tenha esta biblioteca disponível, se o seu sistema tiver um ambiênte X instalado.

Voce pode querer melhorar o GD para lidar com fontes diferentes. As seguintes bibliotecas de fontes são suportadas:

Tabela 2. Bibliotes de fontes suportadas

Biblioteca de fonteDownloadNotas
FreeType 1.xhttp://www.freetype.org/ 
FreeType 2http://www.freetype.org/ 
T1libftp://sunsite.unc.edu/pub/Linux/libs/graphics/) Suporte para fontes Type 1.

Se você tiver o PHP compilado com --enable-exif você poderá trabalhar com as informações guardadas nos cabeçalhos de imagens JPEG e TIFF. Deste jeito você poderá ler meta dados gerados por cameras digitais como mencionado acia. Estas funções não precisam da biblioteca GD.

Instalação

Para ativar suporte ao GD, configure o PHP com --with-gd[=DIR], aonde DIR é o diretório de instalação. Para usar a versão recomendada da biblioteca GD que acompanha o PHP (a qual foi embutida pela primeira vez no PHP 4.3.0), use a opção de configuração --with-gd.

No Windows, você irá incluir a DLL do GD2 php_gd2.dll como uma extensão no php.ini. A DLL GD1 php_gd.dll foi removida a partir do PHP 4.3.2. Também note que as funções de imagens truecolor, como imagecreatetruecolor(), requerem GD2.

Nota: Para ativar o suporte a exif no Windows, php_mbstring.dll deve ser carregada antes de php_exif.dll no php.ini.

Para desabilitar o suporte ao GD no PHP 3 adicione --without-gd na sua linha de configuração.

Melhore as capacidades do GD para manipular mais formatos de imagens especificando a opção --with-XXXX na sua linha de configuração do PHP.

Tabela 3. Formatos de imagens suportados

Formato de ImagemOpção de Configuração
jpeg-6b Para ativar suporte a jpeg-6b adicione --with-jpeg-dir=DIR.
png Para ativar suporte para png adicione --with-png-dir=DIR. Note que, libpng precisa de zlib library, portanto adicione a opção --with-zlib-dir[=DIR] na sua linha de configuração.
xpm Para ativar suporte a xpm adicione --with-xpm-dir=DIR. Se o configure não for capaz de encontrar as bibliotecas necessárias, você deverá adicionar o caminho até as suas bibliotecas X11.

Nota: Ao compilar o PHP com a libpng, você deve usar a mesma versão que foi ligada com a biblioteca GD.

Melhore as capacidades do GD para lidar com fontes diferentes especificando a opção de configuração --with-XXXX na linha de configuração do PHP.

Tabela 4. Bibliotecas de Fontes Suportadas

Biblioteca de FonteOpção de Configuração
FreeType 1.x Para ativar suporte a FreeType 1.x adicione --with-ttf[=DIR].
FreeType 2 Para ativar suporte a FreeType 2 adicione --with-freetype-dir=DIR.
T1lib Para ativar suporte a T1lib (Type 1 fonts) adicione --with-t1lib[=DIR].
Native TrueType string function Para ativar suporte a native TrueType string function adicione --enable-gd-native-ttf.

Configurações em execução

Não existem configurações especificas para imagens, mas você pode estar interresado nas diretivas da extensão exif.

Tipos Resource

Esta extensão não possui nenhum tipo resource.

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

IMG_GIF (integer)

IMG_JPG (integer)

IMG_JPEG (integer)

IMG_PNG (integer)

IMG_WBMP (integer)

IMG_XPM (integer)

IMG_COLOR_TILED (integer)

IMG_COLOR_STYLED (integer)

IMG_COLOR_BRUSHED (integer)

IMG_COLOR_STYLEDBRUSHED (integer)

IMG_COLOR_TRANSPARENT (integer)

IMG_ARC_ROUNDED (integer)

IMG_ARC_PIE (integer)

IMG_ARC_CHORD (integer)

IMG_ARC_NOFILL (integer)

IMG_ARC_EDGED (integer)

IMAGETYPE_GIF (integer)

IMAGETYPE_JPEG (integer)

IMAGETYPE_PNG (integer)

IMAGETYPE_SWF (integer)

IMAGETYPE_PSD (integer)

IMAGETYPE_BMP (integer)

IMAGETYPE_WBMP (integer)

IMAGETYPE_XBM (integer)

IMAGETYPE_TIFF_II (integer)

IMAGETYPE_TIFF_MM (integer)

IMAGETYPE_IFF (integer)

IMAGETYPE_JB2 (integer)

IMAGETYPE_JPC (integer)

IMAGETYPE_JP2 (integer)

IMAGETYPE_JPX (integer)

IMAGETYPE_SWC (integer)

Exemplos

Exemplo 1. Criação de PNG com o 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);
?>
Este exemplo deve ser usado em uma página com uma tag como esta: <img src="button.php?text=text">. O script button.php acima pega a string "text" e coloca-a no topo de uma imagem base que neste caso é "images/button1.png" e mostra a imagem resultante. Este é um meio conveniente de evitar desenhar uma nova imagem de botão a cada vez que você quiser modificar o texto do botão. Com este metodo ele é dinamicamente gerado.

Índice
gd_info -- Obtém informações sobre a biblioteca GD instalada atualmente
getimagesize -- Obtém o tamanho de uma imagem
image_type_to_extension --  Get file extension for image type
image_type_to_mime_type -- Obtém o Mime-Type para um tipo de imagem retornado por getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
image2wbmp -- Envia uma imagem para o browser ou arquivo
imagealphablending -- Set the blending mode for an image
imageantialias --  Indica se as funções de antialias devem ser usadas ou não
imagearc -- Desenha um elipse parcial
imagechar -- Desenha um caractere horizontalmente
imagecharup -- Desenha um caractere verticalmente
imagecolorallocate -- Aloca uma cor para uma imagem
imagecolorallocatealpha -- Aloca cor para uma imagem
imagecolorat -- Retorna o índice da cor de um pixel
imagecolorclosest -- Retorna o índice da cor mais próxima da cor especificada
imagecolorclosestalpha -- Retorna o índice da cor mais próxima da cor especificada + transparencia
imagecolorclosesthwb --  Get the index of the color which has the hue, white and blackness nearest to the given color
imagecolordeallocate -- Desaloca uma cor para uma imagem
imagecolorexact -- Retorna o índice da cor especificada
imagecolorexactalpha -- Retorna o índice da cor especificada + transparencia
imagecolormatch --  Faz com que a versão das cores da paleta sejam mais próximas da versão truecolor
imagecolorresolve --  Retorna o índice da cor especificada ou a alternativa mais próxima possível
imagecolorresolvealpha --  Retorna o índice da cor especificada + transparência ou a sua alternativa mais próxima
imagecolorset -- Set the color for the specified palette index
imagecolorsforindex -- Retorna as cores de um índice
imagecolorstotal -- Retorna o número de cores na paleta de uma imagem
imagecolortransparent -- Define uma cor como tansparente
imageconvolution --  Apply a 3x3 convolution matrix, using coefficient div and offset
imagecopy -- Copia parte de uma imagem
imagecopymerge -- Copia e combina uma parte de uma imagem
imagecopymergegray -- Copy and merge part of an image with gray scale
imagecopyresampled -- Copy and resize part of an image with resampling
imagecopyresized -- Copy and resize part of an image
imagecreate -- Cria uma nova imagem baseada em paleta
imagecreatefromgd2 -- Cria uma nova imagem apartir de um arquivo GD2 ou URL
imagecreatefromgd2part -- Cria uma nova imagem apartir de uma parte de um arquivo GD ou URL
imagecreatefromgd -- Cria uma nova imagem apartir de um arquivo GD ou URL
imagecreatefromgif -- Cria uma nova imagem a partir de um arquivo ou URL
imagecreatefromjpeg -- Cria uma nova imagem a apratir de um arquivo ou URL
imagecreatefrompng -- Cria uma nova imagem a apratir de um arquivo ou URL
imagecreatefromstring -- Cria uma nova imagem a apartir da imagem na string
imagecreatefromwbmp -- Cria uma nova imagem a apratir de um arquivo ou URL
imagecreatefromxbm -- Cria uma nova imagem a apratir de um arquivo ou URL
imagecreatefromxpm -- Cria uma nova imagem a apratir de um arquivo ou URL
imagecreatetruecolor -- Cria uma nova imagem true color
imagedashedline -- Desenha uma linha pontilhada
imagedestroy -- Destroi uma imagem
imageellipse -- Desenha um elipse
imagefill -- Flood fill
imagefilledarc -- Draw a partial ellipse and fill it
imagefilledellipse -- Desenha um elipse prenchido
imagefilledpolygon -- Desenha um poligono prenchido
imagefilledrectangle -- Desenha um retângulo prenchido
imagefilltoborder -- Flood fill to specific color
imagefilter --  Applies a filter to an image
imagefontheight -- Retorna a altura da fonte
imagefontwidth -- Retorna a largura da fonte
imageftbbox -- Give the bounding box of a text using fonts via freetype2
imagefttext -- Escreve texto na imagem usando fontes FreeType 2
imagegammacorrect -- Apply a gamma correction to a GD image
imagegd2 -- Envia uma imagem GD2
imagegd -- Envia a imagem GD para o browser ou um arquivo
imagegif -- Envia uma imagem para o browser ou arquivo
imageinterlace -- Ativa ou desativa o entrelaçamento
imageistruecolor -- Indica quando uma imagem é uma imagem truecolor
imagejpeg -- Envia a imagem para o borwser ou arquivo
imagelayereffect --  Set the alpha blending flag to use the bundled libgd layering effects
imageline -- Desenha uma linha
imageloadfont -- Carrega uma nova fonte
imagepalettecopy -- Copia a paleta de uma imagem para a outra
imagepng -- Envia uma imagem PNG para o browser ou para um arquivo
imagepolygon -- Desenha um poligono
imagepsbbox --  Give the bounding box of a text rectangle using PostScript Type1 fonts
imagepsencodefont -- Change the character encoding vector of a font
imagepsextendfont -- Extend or condense a font
imagepsfreefont -- Libera a memória usada por uma fonte PostScript Type
imagepsloadfont -- Carrega uma fonte PostScript Type 1 a partir de um arquivo
imagepsslantfont -- Slant a font
imagepstext -- To draw a text string over an image using PostScript Type1 fonts
imagerectangle -- Desenha um retângulo
imagerotate -- Gira uma imagem com o ângulo dado
imagesavealpha --  Define a opção para salvar a informação completa do alpha channel (ao invés de a transparencia de uma cor só) quando estiver salvando imagens PNG.
imagesetbrush -- Set the brush image for line drawing
imagesetpixel -- Define um único pixel
imagesetstyle -- Set the style for line drawing
imagesetthickness -- Define a espessura para o desenho de linhas
imagesettile -- Set the tile image for filling
imagestring -- Desenha uma string horizontalmente
imagestringup -- Desenha uma string verticalmente
imagesx -- Obtem a largura da imagem
imagesy -- Obtém a altura da imagem
imagetruecolortopalette -- Converte uma imagem true color para uma imagem de paleta
imagettfbbox -- Retorna uma caixa com o limites de um texto usando fontes TrueType
imagettftext -- Escreve texto na imagem usando fontes TrueType
imagetypes -- Retorna os tipos de imagens suportados por esta instalação do PHP
imagewbmp -- Envia uma imagem para o browser ou arquivo
imagexbm --  Output XBM image to browser or file
iptcembed -- Embute dados binários IPTC em uma imagem JPEG
iptcparse --  Interpreta um bloco IPTC http://www.iptc.org/ binário em tags simples.
jpeg2wbmp -- Converte um arquivo de imagem JPEG para um arquivo de imagem WBMP
png2wbmp -- Converte um arquivo de imagem PNG para um arquivo de imagem WBMP


gd_info> <iis_stop_service
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Imagens, Funções de
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