Carcleo 4 Denunciar post Postado Maio 18, 2010 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
Leozitho 81 Denunciar post Postado Maio 19, 2010 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
Carcleo 4 Denunciar post Postado Maio 19, 2010 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