Jump to content


Photo

Problema Imagecreatefrombmp()


  • Faça o login para participar
6 replies to this topic

#1 Josy

Josy

    :*

  • Usuários
  • 662 posts
  • Sexo:Feminino
  • Localidade:Porto Alegre/RS

Posted 10/06/2007, 00:38

Fiz toda a função para trabalhar com imagens, mas estou tendo problemas com imagens .bmp, está me dando o erro:
Fatal error: Call to undefined function imagecreatefrombmp()

$imgcheck = isset($_FILES['img']) ? $_FILES['img'] : null;
						
			//VERIFICA O TIPO DE ARQUIVO
			$info = $_FILES['img']['type'];
						
			//SE É UMA IMAGEM
			if($_FILES['img']['type'] == "image/pjpeg" || $_FILES['img']['type'] == "image/gif"  || $_FILES['img']['type'] == "image/bmp")
			{
				$img = $_FILES['img']['name'];
				
				//DIRETÓRIO PARA ONDE O ARQUIVO SERÁ MOVIDO 	
				$diretorio="./images/";
				
				//VERIFICA EXTENSÃO ARQUIVO
				$extensao = strtolower(end(explode('/', $info)));
				if ($extensao == 'pjpeg')
				{
					$extensao = 'jpeg';
				}
				
				//MOVE PARA O DIRETÓRIO DESEJADO
				if (move_uploaded_file($_FILES['img']['tmp_name'], $diretorio . $conteudo.'.'.$extensao))
				{
					$nome2 = 'mini'.$conteudo.'.'.$extensao;
					$nome = $conteudo.'.'.$extensao;
					$probimg = "Imagem movida para ". $diretorio . $conteudo.'.'.$extensao;
					
					//ENVIA IMAGEM ORIGINAL PARA DIRETÓRIO
					$CriarImagemDe= "imagecreatefrom".$extensao;
					$img = $CriarImagemDe($diretorio . $conteudo.'.'.$extensao);
					
					echo $img;
					$largurao = imagesx($img);//LARGURA DA AMOSTRA
					$alturao = imagesy($img);//ALTURA AMOSTRA
					$alturad = 50; //DEFINIR ALTURA DA MINIATURA EM PX 
					$largurad = ($largurao*$alturad)/$alturao;//CALCULA A LARGURA DA IMAGEM APARTIR DA LARGURA DA MINIATURA
					$nova = imagecreatetruecolor($largurad,$alturad);//CRIA IMAGEM EM BRANCO
					imagecopyresampled($nova,$img,0,0,0,0,$largurad,$alturad,$largurao,$alturao);//COPIA SOBRE A IMAGEM EM BRANCO A AMOSTRA DIMUNUINDO CONFORME ESPECIFICAÇÕES
					//VERIFICA TIPO DO ARQUIVO PARA CHAMAR FUNÇÃO CORRETA
					$imageformato = "image".$extensao;
					//$imageformato($img);//MOSTRA IMAGEM TAMANHO NORMAL
					//$imageformato($nova);//MOSTRA A MINIATURA
					$imageformato($nova,$diretorio.$nome2);//SALVA MINIATURA
				
					//Destruimos o cache da imagem para liberar uma nova thumb
					ImageDestroy($nova); 
					ImageDestroY($img); 
				}
			}
			else 
			{
				$prob= "O arquivo escolhido não é uma imagem!!";  
				$erro=true;
			}


___________________________________

Josy R.L.
Grupo Plyme
www.plyme.com.br
___________________________________


#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 10/06/2007, 01:09

Pois é. A biblioteca GD não possui esta função, ou melhor, não suporta bitmap. :huh:

No caso do suporte ser necessário tu poderia fazer um workaround que seria converter o BMP para um outro formato com algum programa de linha de comando rodando no site. É uma idéia... :rolleyes:

[]’s :DAté mais

#3 Bruno Augusto

Bruno Augusto

    ∙•● Restarting... ●•∙

  • Usuários
  • 1968 posts
  • Sexo:Não informado
  • Localidade:Itajubá

Posted 10/06/2007, 12:47

Olha, posso estar falando besteira (de novo), mas a ImageMagick não faz isso?

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 10/06/2007, 22:41

Olha, posso estar falando besteira (de novo), mas a ImageMagick não faz isso?



Não é besteira não ;B

O imagemagick faz sim, mas você não tem idéia de como é complicado (leia-se chato) de configurar ele ;~
precisa de dlls, path configurado certinho
compilar a dll então com o path do imagemagick certo então....

Sou expert em me ferrar com imagemagick ;x (o soft é bom! juro! Mas configurar ele para php ... Deus o.O)

Temos um projeto no trabalho que lê images dicom e converte-as, mas o imagemagick não se mostrou muito bom (detonava com o buffer do apache... tabém... uma imagem médica de 200mb ¬¬'). Tive que usar um workarround com um approach (jargões técnicos nerds ;B) com um executável (poupu mais mémoria do apache ^^)

@Josy
Se eu fosse você, esqueceria o .bmp, optaria por PNG =}

(y)

Edição feita por: savior, 10/06/2007, 22:46.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 Josy

Josy

    :*

  • Usuários
  • 662 posts
  • Sexo:Feminino
  • Localidade:Porto Alegre/RS

Posted 11/06/2007, 13:40

Pois é, mas para deixar d forma completa seria correto aceitar qualuqer tipo de imagem, inclusive bmp né..

Pesquisando achei essa função:

<?php
/*********************************************/
/* Fonction: ImageCreateFromBMP */
/* Author: DHKold */
/* Contact: admin@dhkold.com */
/* Date: The 15th of June 2005 */
/* Version: 2.0B */
/*********************************************/

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

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

//2 : Chargement des ent괥s 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顴ion 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;
}
?>

Alguém já usou? Como adiciono ela no meu script?

___________________________________

Josy R.L.
Grupo Plyme
www.plyme.com.br
___________________________________


#6 Tugu

Tugu

    <! Fernando Tugu !>

  • Usuários
  • 381 posts
  • Sexo:Masculino
  • Localidade:São Bernardo do Campo - SP
  • Interesses:Ajudar pessoas que tenham dificuldades em minhas especializações... e espero que me ajudem quando ficar muito xxxxxx meus trampos...

Posted 16/05/2012, 14:27

Pois é, mas para deixar d forma completa seria correto aceitar qualuqer tipo de imagem, inclusive bmp né..

Pesquisando achei essa função:

<?php
/*********************************************/
/* Fonction: ImageCreateFromBMP */
/* Author: DHKold */
/* Contact: admin@dhkold.com */
/* Date: The 15th of June 2005 */
/* Version: 2.0B */
/*********************************************/

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

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

//2 : Chargement des ent괥s 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顴ion 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;
}
?>

Alguém já usou? Como adiciono ela no meu script?


acabei de testar funcionou para criar o objeto BMP, valeus!
<span style='font-size:10pt;line-height:100%'>Fernando Tugu</span>
Meu Lema: "O ser Humano não é nada sem seus sonhos . . . então vá pra cama dormir ! ! !"

#7 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 23/09/2017, 12:11

Cialis In Der Apotheke Kaufen Can You Take Perocet With Amoxicillin cialis Priligy Hilft Online Pharmacies In Usa




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq