Manual do PHP
Anterior |  | Próxima

# XLII. 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 imagens | Biblioteca para baixar | Notas
--- | --- | ---
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.
jpeg-6b | ftp://ftp.uu.net/graphics/jpeg/ |
png | http://www.libpng.org/pub/png/libpng.html | Apenas suportados em versões do GD maiores do que gd-1.6.
xpm | ftp://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 fonte | Download | Notas
--- | --- | ---
FreeType 1.x | http://www.freetype.org/ |
FreeType 2 | http://www.freetype.org/ |
T1lib | ftp://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.

> Nota: O PHP não precisa de nenhum módulo adicional para o módulo exif.

# 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 GD2 `php_gd2.dll` como uma extensão `php.ini`. A DLL GD1 `php_gd.dll` foi removido no PHP 4.3.2. Também note que as funções de imagens truecolor preferenciais, como imagecreatetruecolor(), requerem o GD2.

Para ativar o suporte a exif no Windows, php_mbstring.dll deve ser carregado 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 Imagem | Opçã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.

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 Fonte | Opçã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

O comportamento dessas funções podem ser modificado pelas configurações do `php.ini`.

Exif suporta automaticamente a conversão para Unicode e JIS dos comentários do usuário quando o módulo mbstring esta disponível. Isto é feito inicialmente decodificando o comentário usando o conjunto de caracteres especificado. O resultado é então codificado usando outro conjunto de caracteres que deve ser igual a sua saída HTTP.

Tabela 5. Opções de Configuração Exif

Nome | Padrão | Modificável
--- | --- | ---
exif.encode_unicode | "ISO-8859-15" | PHP_INI_ALL
exif.decode_unicode_motorola | "UCS-2BE" | PHP_INI_ALL
exif.decode_unicode_intel | "UCS-2LE" | PHP_INI_ALL
exif.encode_jis | "" | PHP_INI_ALL
exif.decode_jis_motorola | "JIS" | PHP_INI_ALL
exif.decode_jis_intel | "JIS" | PHP_INI_ALL

Para maiores detalhes e definições das constantes PHP_INI_* veja ini_set().

Breve descrição das diretivas de configuração.

exif.encode_unicode string

  exif.encode_unicode define o conjunto de caracteres UNICODE com o qual os comentários dos usuário são manipulados. O padrão é ISO-8859-15 o qual deve funcionar para a maioria dos países não asiáticos. A definição pode ser em branco ou então um conjunto de caracteres suportaos por. Se for vazio, então a codificação interna do mbstring atual é usada.

exif.decode_unicode_motorola string

  exif.decode_unicode_motorola define o conjunto de caracteres interno da imagem para comentários do usuário em Unicode se a imagem estiver em motorola byte order (big-endian). Esta definição não pode ser vazia, mas você pode especificar uma lista de codificações suportadas por . O padrão é UCS-2BE.

exif.decode_unicode_intel string

  exif.decode_unicode_intel define o conjunto de caracteres interno da imagem para comentários codificados Unicode se a imagem esta em ordem de bytes inteld (little-endian). Esta definição não pode estar vazia, mas você pode especificar uma lista de codificações suportadas por mbstring. O padrão é UCS-2LE.

exif.encode_jis string

  exif.encode_jis define o conjunto de caracteres para os comentários do usuário JIS. O padrão é uma string vazia que faz com que as funções usem a codificação interna atual do mbstring.

exif.decode_jis_motorola string

  exif.decode_jis_motorola define o conjunto de caracteres interno da imagem para comentários do usuário JIS se a imagem esta em motorola byte order (big-endian). Esta definição não pode ser vazia mas você pode especificar uma lista de codificações suportadas pelo mbstring. O padrão é JIS.

exif.decode_jis_intel string

  exif.decode_jis_intel define o conjunto interno de caracteres para os comentários do usuário JIS se a imagem for intel byte order (little-endian). Esta definição não pode ser vazia mas você pode especificar uma lista de codificações suportadas pelo mbstring. O padrão é JIS.

# 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.

Anterior | Principal | Próxima
ob_iconv_handler | Acima | exif_imagetype