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.559 ]

Homepage: https://antoniomedeiros.dev/

Download converte-png.php




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!

  



Esconder código-fonte

<?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>';
      }
   }
?>

Scripts recomendados

Jogo de Dados

Função Desvio Padrão

Converte uma string binaria em seu respectivo codigo ascii

Calendário simples em PHP

WShell - Comandos do sistema via web


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts