Convertendo imagens PNG em imagens BMP utilizando PHP
Publicado por Antônio Vinícius Menezes Medeiros (última atualização em 07/11/2010)
[ Hits: 8.897 ]
Homepage: https://antoniomedeiros.dev/
Queria utilizar o pacote de ícones Oxygen ( http://www.oxygen-icons.org/ ), o pacote de ícones padrão do KDE 4 ( http://dot.kde.org/2007/03/08/road-kde-4-oxygen-artwork-and-icons ), no programa que estou desenvolvendo como trabalho de conclusão de curso, mas me esbarrei em um problema: o Delphi 7 não importa arquivos PNG para os ícones dos botões.
A solução: pesquisando na Internet, desenvolvi um script em PHP para converter arquivos PNG em arquivos BMP e o utilizei para converter todos os ícones do pacote. Aqui venho mostrá-los minha invenção. As páginas que utilizei como referência aparecem nos comentários.
Obs.: Esse script também funciona com imagens PNG com transparência!
<?php
/*
Este script PHP converte imagens no formato PNG em imagens no formato BMP.
Autor: Antônio Vinícius (http://www.vivaolinux.com.br/~viniciusecia)
Para executar esse script, você precisará da classe BMP, que pode ser obtida no seguinte endereço:
imagebmp + imagecreatefrombmp Download - Softpedia
http://webscripts.softpedia.com/scriptDownload/imagebmp---imagecreatefrombmp-Download-58827.html
Coloque o arquivo "BMP.php" na mesma pasta deste script ou altere a linha abaixo.
*/
include_once 'BMP.php';
function ConvertePNG($nome_do_arquivo, $apagar_original = false) {
/*
Descrição: função que converte a imagem no formato PNG passada como parâmetro em uma imagem no formato BMP
Parâmetros:
$nome_do_arquivo: caminho do arquivo PNG que deve ser convertido.
$apagar_original: define se o arquivo original deve ser excluído após a criação do novo arquivo. Por padrão é falso.
Valor retornado: verdadeiro ou falso, conforme a imagem tenha sido convertida ou não
*/
//Verifica se o arquivo fornecido como parâmetro existe
if (!file_exists($nome_do_arquivo)) {
return false;
}
//Verifica se o arquivo fornecido como parâmetro é uma imagem .png
$informacoes_diretorio = pathinfo($nome_do_arquivo);
if (($informacoes_diretorio['extension'] != 'png') or (is_dir($nome_do_arquivo))) {
return false;
}
//Determina o caminho para a nova imagem
$diretorio = $informacoes_diretorio['dirname'];
$arquivo = $informacoes_diretorio['filename'];
$caminho_nova_imagem = $diretorio.'/'.$arquivo.'.bmp';
//Apaga a nova imagem, caso já exista
if (file_exists($caminho_nova_imagem)) {
unlink($caminho_nova_imagem);
}
//Obtém as dimensões da imagem original
list($largura, $altura) = getimagesize($nome_do_arquivo);
//Inicia uma nova imagem
$nova_imagem = imagecreatetruecolor($largura, $altura);
//Define sua cor de fundo (verde)
$cor_de_fundo = imagecolorallocate($nova_imagem, 128, 128, 0);
imagefill($nova_imagem, 0, 0, $cor_de_fundo);
//Insere a imagem original redimensionada na imagem nova
$imagem_original = imagecreatefrompng($nome_do_arquivo);
imagecopy($nova_imagem, $imagem_original, 0, 0, 0, 0, $largura, $altura);
//Grava a nova imagem na pasta de destino
@imagebmp($nova_imagem, $caminho_nova_imagem);
if ($apagar_original) {
unlink($nome_do_arquivo);
}
return true;
}
/* Exemplos de uso da função ConvertePNG() */
//Tenta converter o arquivo "favicon.png" sem apaga-lo
$arquivo = '/opt/lampp/htdocs/favicon.png';
if (@ConvertePNG($arquivo)) {
echo 'O arquivo '.$arquivo.' foi convertido com sucesso!<br>';
} else {
echo 'Não foi possível converter o arquivo '.$arquivo.'. Verifique se esse arquivo existe e se é uma imagem PNG válida.<br>';
}
//Tenta converter o arquivo "favicon.png" e apaga-lo após a conversão
if (@ConvertePNG($arquivo, true)) {
echo 'O arquivo '.$arquivo.' foi convertido com sucesso!<br>';
} else {
echo 'Não foi possível converter o arquivo '.$arquivo.'. Verifique se esse arquivo existe e se é uma imagem PNG válida.<br>';
}
//Tenta converter o arquivo "favicon.png". Desta vez deve dar erro, visto que ele foi excluído anteriormente
if (@ConvertePNG($arquivo)) {
echo 'O arquivo '.$arquivo.' foi convertido com sucesso!<br>';
} else {
echo 'Não foi possível converter o arquivo '.$arquivo.'. Verifique se esse arquivo existe e se é uma imagem PNG válida.<br>';
}
/*
Deve ser interessante também converter todos os arquivos PNG de determinada pasta e suas subpastas.
Para isso, você pode utilizar a função a seguir em conjunto com a função anterior.
*/
function ListarPastasArquivos($pasta = '.', $recursivamente = false) {
/*
Descrição: função que lista todos os arquivos e pastas de uma pasta e, opcionalmente, os arquivos e pastas de suas subpastas
Parâmetros:
$pasta: caminho da pasta cujos arquivos e pastas deseja-se listar.
$recursivamente: define se os arquivos e pastas das subpastas também devem ser listados. Por padrão é falso.
Valor retornado: um array contendo os arquivos e pastas da subpasta passada como parâmetro
Adaptada de: http://www.phpbrasil.info/classes-funcoes-e-scripts/lista-recursiva-de-arquivos
*/
$diretorio = opendir($pasta);
while ($arquivo = readdir($diretorio)) {
if (($arquivo != '.') && ($arquivo != '..')) {
$path = $pasta.'/'.$arquivo;
$lista[] = $path;
if ((is_dir($path)) and ($recursivamente)) {
$subitens = ListarPastasArquivos($path, true);
foreach ($subitens as $subitem) {
$lista[] = $subitem;
}
}
}
}
closedir($diretorio);
return $lista;
}
/* Exemplo de conversão recursiva de arquivos PNG em arquivos BMP */
//Converte todos os arquivos PNG encontrados na pasta "/opt/lampp/htdocs", se houver
$listagem = ListarPastasArquivos('/opt/lampp/htdocs', true);
foreach($listagem as $arquivo){
if (@ConvertePNG($arquivo, false)) {
echo 'Arquivo convertido: '.$arquivo.'<br>';
}
}
?>
Converte uma string binaria em seu respectivo codigo ascii
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Mint Xfce não mantém a conexão no wi-fi (2)
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)









