Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Criando thumbmail de bmp

Recommended Posts

Ola pessoal, estou com dois problemas.

 

Tenho o código abaixo para fazer upload de imagens e gerar miniaturas dasa mesmas e salva-las nas pastas Normal e Miniatura.

 

Acontece que:

 

1) Quando faço o Upload de imagens gif e png, o fundo das miniaturas fica preto e não vai a cor de fundo da imagem original. Queria arrumar isso.

2) Não estou conseguindo uma funçao para fazer o upload e gerar a miniatura de figuras .bmp (que funcione).; Caso possam ajudar agradeço.

 

Segue o erro que dá ao usar imagecreatefromwbmp

Warning: imagecreatefromwbmp() [function.imagecreatefromwbmp]: 'teste_upload/normal/cão_latindo.b240000b0b7b271b1a2270ff719bc376.bmp' is not a valid WBMP file in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 73

Warning: imagesx(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 76

Warning: imagesy(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 78

Warning: Division by zero in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 82

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 85

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 88

Warning: imagewbmp(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 94

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 99

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 100

Segue o código que estou usando

<b>Envio das fotos</b><br />

<form action="Multiplos_Uploads.php" method="post"  enctype="multipart/form-data">
<input type="file" name="fotos[]"><br />
<input type="file" name="fotos[]"><br />
<input type="file" name="fotos[]"><br />
<input type="submit" value="OK"/>
</form>

<?
$dir="teste_upload/normal/";
$dir_mini="teste_upload/mini/";
$Fotos = $_FILES['fotos'];
//$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE;
for($i = 0; $i < sizeof($Fotos['name']); $i++){
    
    $Nome    = $Fotos['name'][$i];
    $Tamanho = $Fotos['size'][$i];
    $Tipo    = $Fotos['type'][$i];
    $Tmpname = $Fotos['tmp_name'][$i];
    
    if (!$Nome) { 
                  echo 'Você não enviou nada na posição' . ($i+1) . '<br/>';
                 }
    else         {        
                    ereg ("(.*)\.([^.]+)$", $Nome, $partes);
                    if(($partes[2] != "jpg") and ($partes[2] != "jpeg") and  ($partes[2] != "png") and ($partes[2] != "gif"))     
                        {
                    
                            echo 'O arquivo ' . ($i+1) . ' não é um arquivo válido.<br/>';
                                    
                                    // Faz contagem de enviada com sucesso
                                    $Conta++;
                            }
                    else    {    
                    
                                // Pega extensão do arquivo
                                preg_match("/\.(gif|png|jpg|jpeg){1}$/i", $Nome, $ext);
                                
                                   //  Retira a extensao do nome do arquivo
                                $nome_sem_extensao = $Nome;
                                $nome_sem_extensao = basename ($nome_sem_extensao,".gif");
                                $nome_sem_extensao = basename ($nome_sem_extensao,".jpeg");
                                $nome_sem_extensao = basename ($nome_sem_extensao,".jpg");
                                $nome_sem_extensao = basename ($nome_sem_extensao,".png");
                                
                                  //  Retira espaços em branco do nome do arquivo
                                $nome_banco = str_replace(" ","_",$nome_sem_extensao);
                                
                                        //Gera um nome único para a imagem
                                $imagem_nome = $nome_banco . "." . md5(uniqid(time())) . "." . $ext[1];

                                         //Diretórios de Gravação das imagens
                                $Caminho = $dir . $imagem_nome;
                                $Caminho_mini = $dir_mini . $imagem_nome;    

        
                                if(move_uploaded_file($Tmpname, $Caminho))            
                                {
                                    echo 'Foto ' . ($i+1) . ' enviada.<br/>';
                                    // Faz contagem de enviada com sucesso
                                   $Conta++;
                                    ///cria a miniatura e faz io move_uploaded_file
                                                      
                        //IMAGEM A SER ABERTA Nesse momento será o $Caminho pois o upload já foi feito e o arquivo temporario apagado
                                      
                                      //CRIA UMA NOVA IMAGEM
                                      if ($ext[1] =="jpg") { $imagem_orig = imagecreatefromjpeg($Caminho); }
                                      else if ($ext[1] =="jpeg") { $imagem_orig = imagecreatefromjpeg($Caminho); }
                                      else if ($ext[1] =="gif") { $imagem_orig = imagecreatefromgif($Caminho); }
                                      else if ($ext[1] =="png") { $imagem_orig = imagecreatefrompng($Caminho); }
                                      //LARGURA
                                      $pontoX = ImagesX($imagem_orig);
                                      //ALTURA
                                      $pontoY = ImagesY($imagem_orig); 
                                      
                                      //DEFINE OS PARÂMETROS DA MINIATURA
                                      $largura = 150;
                                      $altura = ($pontoY * $largura) / $pontoX;
                                      
                                      //CRIA O THUMBNAIL
                                      $imagem_fin = imagecreatetruecolor($largura, $altura); 
                                      
                                      //COPIA A IMAGEM ORIGINAL PARA DENTRO
                                      imagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY); 
                                      
                                      //SALVA A IMAGEM
                                      if ($ext[1] =="jpg") { imagejpeg($imagem_fin, $Caminho_mini ,100);  }
                                      else if ($ext[1] =="jpeg") { imagejpeg($imagem_fin, $Caminho_mini ,100);  }
                                      else if ($ext[1] =="gif") { imagegif($imagem_fin, $Caminho_mini ,100);  }
                                      else if ($ext[1] =="png") { imagepng($imagem_fin, $Caminho_mini); }
                                      
                                       $NomesFotos= $imagem_nome;
                                      //LIBERA A MEMÓRIA
                                      imagedestroy($imagem_orig);
                                      imagedestroy($imagem_fin);

                                  }            
                                  else // Erro no envio
                                  {
                                      echo 'Não foi possível enviar a foto' . ($i+1) . '<br/>';
                                  }
                            }
                  }
                                          } //FIM DO FOR
?>
<?=
$todas_fotos = implode(';',$ NomesFotos);
?>


Compartilhar este post


Link para o post
Compartilhar em outros sites

A biblioteca GD não trabalha com o formato BMP, a função que você está utilizando não tem nada a ver com este formato, dê uma olhada na documentação:

 

http://br.php.net/ma...atefromwbmp.php

 

Eu tenho uma função para trabalhar com imagens no formato BMP, segue abaixo:

 

function imagecreatefrombmp($filename) {
 //Ouverture du fichier en mode binaire
 if (! $f1 = fopen($filename,"rb")) return FALSE;

 //1 : Chargement des ent?tes FICHIER
 $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1,14));
 if ($FILE['file_type'] != 19778) return FALSE;

 //2 : Chargement des ent?tes BMP
 $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'.
		 '/Vcompression/Vsize_bitmap/Vhoriz_resolution'.
		 '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1,40));
 $BMP['colors'] = pow(2,$BMP['bits_per_pixel']);
 if ($BMP['size_bitmap'] == 0) $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset'];
 $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel']/8;
 $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']);
 $BMP['decal'] = ($BMP['width']*$BMP['bytes_per_pixel']/4);
 $BMP['decal'] -= floor($BMP['width']*$BMP['bytes_per_pixel']/4);
 $BMP['decal'] = 4-(4*$BMP['decal']);
 if ($BMP['decal'] == 4) $BMP['decal'] = 0;

 //3 : Chargement des couleurs de la palette
 $PALETTE = array();
 if ($BMP['colors'] < 16777216)
 {
	$PALETTE = unpack('V'.$BMP['colors'], fread($f1,$BMP['colors']*4));
 }

 //4 : Cr?ation de l'image
 $IMG = fread($f1,$BMP['size_bitmap']);
 $VIDE = chr(0);

 $res = imagecreatetruecolor($BMP['width'],$BMP['height']);
 $P = 0;
 $Y = $BMP['height']-1;
 while ($Y >= 0)
 {
	$X=0;
	while ($X < $BMP['width'])
	{
 if ($BMP['bits_per_pixel'] == 24)
		$COLOR = unpack("V",substr($IMG,$P,3).$VIDE);
 elseif ($BMP['bits_per_pixel'] == 16)
 { 
		$COLOR = unpack("n",substr($IMG,$P,2));
		$COLOR[1] = $PALETTE[$COLOR[1]+1];
 }
 elseif ($BMP['bits_per_pixel'] == 8)
 { 
		$COLOR = unpack("n",$VIDE.substr($IMG,$P,1));
		$COLOR[1] = $PALETTE[$COLOR[1]+1];
 }
 elseif ($BMP['bits_per_pixel'] == 4)
 {
		$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
		if (($P*2)%2 == 0) $COLOR[1] = ($COLOR[1] >> 4) ; else $COLOR[1] = ($COLOR[1] & 0x0F);
		$COLOR[1] = $PALETTE[$COLOR[1]+1];
 }
 elseif ($BMP['bits_per_pixel'] == 1)
 {
		$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
		if 	(($P*8)%8 == 0) $COLOR[1] = $COLOR[1] 	>>7;
		elseif (($P*8)%8 == 1) $COLOR[1] = ($COLOR[1] & 0x40)>>6;
		elseif (($P*8)%8 == 2) $COLOR[1] = ($COLOR[1] & 0x20)>>5;
		elseif (($P*8)%8 == 3) $COLOR[1] = ($COLOR[1] & 0x10)>>4;
		elseif (($P*8)%8 == 4) $COLOR[1] = ($COLOR[1] & 0x8)>>3;
		elseif (($P*8)%8 == 5) $COLOR[1] = ($COLOR[1] & 0x4)>>2;
		elseif (($P*8)%8 == 6) $COLOR[1] = ($COLOR[1] & 0x2)>>1;
		elseif (($P*8)%8 == 7) $COLOR[1] = ($COLOR[1] & 0x1);
		$COLOR[1] = $PALETTE[$COLOR[1]+1];
 }
 else
		return FALSE;
 imagesetpixel($res,$X,$Y,$COLOR[1]);
 $X++;
 $P += $BMP['bytes_per_pixel'];
	}
	$Y--;
	$P+=$BMP['decal'];
 }

 //Fermeture du fichier
 fclose($f1);

 return $res;
 
}

Se for usar esta função substitua em seu script a função imagecreatefromwbmp() pela função imagecreatefrombmp().

 

Para trabalhar com uma ampla variedade de formatos de arquivos, e inclusive resolver o problema que você está tendo com imagens transparentes, eu particularmente recomendo o uso da biblioteca ImageMagick, ela é muito melhor e mais avançada que a GD.

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola.

 

Olha só.

 

O imagecreate até funcionou só que após ela,. eu crio a miniatura e movo ela para a pasta de miniaturas.

 

Uso a função imagebmp assim: imagewbmp($imagem_fin, $Caminho_mini);

 

O problema é que a imagem vai corrompida para a pasta de miniaturas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.