Não há função para gerar imagens bmp na biblioteca GD, então eu mesmo escrevi uma. Essa função também possui um algoritmo de compactação que ainda não escrevi, mas é suficiente. Os alunos que precisarem podem dar uma olhada.
int imagebmp (imagem de recurso [, string nome do arquivo [, int $bit [, compactação int]]] )
$im: recurso de imagem
$filename: Se você deseja salvar como um arquivo, especifique o nome do arquivo. Se estiver vazio, será gerado diretamente no navegador.
$bit: qualidade de imagem (1, 4, 8, 16, 24, 32 bits)
$compression: método de compactação, 0 significa sem compactação, 1 usa o algoritmo de compactação RLE8 para compactação.
Nota: Esta função ainda requer o suporte da biblioteca GD.
Demonstração:
$im = imagecreatefrompng("test.png");
imagembmp($im);
destruição de imagem($im);
Fonte:
/**
* Crie imagens em formato bmp
*
* @autor: legenda( [email protected] )
* @link: http://www.ugia.cn/?p=96
* @description: crie um arquivo Bitmap com a biblioteca GD
* @versão: 0.1
*
* @param recurso $im recurso de imagem
* @param string $filename Se você deseja salvar como um arquivo, especifique o nome do arquivo. Se estiver vazio, ele será exibido diretamente no navegador.
* @param inteiro $bit qualidade de imagem (1, 4, 8, 16, 24, 32 bits)
* @param inteiro $compression método de compactação, 0 significa sem compactação, 1 usa algoritmo de compactação RLE8 para compactação
*
* @return inteiro
*/
função imagembmp(&$im, $nomedoarquivo = '', $bit = 8, $compressão = 0)
{
if (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
{
$bit = 8;
}
senão if ($bit == 32) // todo:32 bits
{
$bit = 24;
}
$bits = pow(2, $bits);
//Ajusta a paleta de cores
imagemtruecolortopalette($im, true, $bits);
$largura =imagensx($im);
$altura =imagens($im);
$colors_num = imagemcolorstotal($im);
if ($bit <= 8)
{
//índice de cores
$rgb_quad = '';
for ($i = 0; $i < $num_cores; $i ++)
{
$cores = imagemcoresforindex($im, $i);
$rgb_quad .= chr($colors['blue']) chr($colors['green']) chr($colors['red']) .
}
//dados bitmap
$bmp_dados = '';
// descompactado
if ($compressão == 0 || $bit < 8)
{
if (!in_array($bit, array(1, 4, 8)))
{
$bit = 8;
}
$compressão = 0;
//O número de bytes em cada linha deve ser múltiplo de 4 e deve ser preenchido.
$extra = '';
$padding = 4 - ceil($largura / (8 / $bit))% 4;
if ($ preenchimento% 4! = 0)
{
$extra = str_repeat("