LII. 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
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
imagepscopyfont --  Make a copy of an already loaded font for further modification
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