Ir para conteúdo

POWERED BY:

Arquivado

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

Jonathan Alencar

Redimensionar GIF e manter a animacao

Recommended Posts

Fala gente tudo bem,

 

Olha eu aqui novamente pedido ajuda de vocês impaquei numa parte

aqui da programação que não passo de modo algum :P já estudei o manual

do php procurei por exemplos de como se fazer isso mais sempre tem um codigo

monstrinho :P que alguem faz que não da pra intender nada... bom vamos lá..

 

Abaixo tem o codigo do arquivo redimensionar.php

neste codigo ele funciona somente para jpg que é uma beleza....

porém gostaria de fazer ele pra redimensionar o GIF e também manter a animacao do mesmo.

 

<?php

function Redimensionar($imagem, $name, $largura, $pasta){

	$img = imagecreatefromgif($imagem['tmp_name']);
	$x   = imagesx($img);
	$y   = imagesy($img);
	$altura = ($largura * $y) / $x;

	$nova = imagecreatetruecolor($largura, $altura);
	imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);

	imagegif($nova, "$pasta/$name");
	imagedestroy($img);
	imagedestroy($nova);

	return $name;
}

?>

 

Esta é a funcao que chama o arquivo acima ....

 

<?php

if($arquivo['type'] == 'image/gif'){
		require("publicidade/funcao_redimensionar.php");
		$name = md5(uniqid(rand(), true)).".gif";
		Redimensionar($arquivo, $name, 180, $dir);
	} 

?>

 

Até aqui tudo bem porém o mesmo redimensiona a imagem mais ele pega apenas o primeiro frame da animação

e o restante não vai...

 

Será que vocês poderiam me dar a luz sobre isso?

 

Desde já fico muito grato.

 

Abraço a todos imasters :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que não seja possível redimensionar GIFs com animação.

Até pq teria que separar os frames, redimensionar cada um deles, e depois juntar.

 

Não flood o tópico. Aguarde uma resposta.

Se ninguém lhe respondeu, pode ser porque ninguém que já leu, tem uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom valeu...

 

Pela tentativa mais acho que vou redimensionar do modo normal..

 

width="" height=""

 

só a imagem que vou colocar num upload..normal..

Dai vou limitar o tamanho da imagem ... pelo menos assim

força o maluco coloca imagem gif do tamanho e jpg.. redimensionavel..

 

Vlw..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente gente.

 

queria saber se tem algum modo de adptar essa função logo

acima pra enviar arquivos mais como por exemplo: png, gif(sem animacao), bmp?..

 

Desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim sim eu estudei isso no manual do php...

 

da pra se fazer sim mais o que eu nao estou intendo é como fazer 1 que reconheca as diferencas tipo

 


if($arquivo['type'] == 'image/gif'){
                        require("funcao_redimensionar.php");
                        $name = md5(uniqid(rand(), true)).".gif";
                        Redimensionar($arquivo, $name, 180, $dir);
                } 

atravez deste aqui pegar o arquivo..certinho porém sem precisar deixando vários campos
um pra cada sabe um campo file pro png um pro jpeg um pro gif..!

Agradeço a atenção  @lucaswxp


Compartilhar este post


Link para o post
Compartilhar em outros sites

da pra se fazer sim mais o que eu nao estou intendo é como fazer 1 que reconheca as diferencas tipo

atravez deste aqui pegar o arquivo..certinho porém sem precisar deixando vários campos

um pra cada sabe um campo file pro png um pro jpeg um pro gif..!

Bom, mudando seu IF para:

if( preg_match( '/image\/.*/' , $arquivo[ 'type' ] ) ){
$ext = image_type_to_extension( exif_imagetype( $arquivo[ 'tmp_name' ] ) , true );

require 'funcao_redimensionar.php';
//$name = md5(uniqid(rand(), true)).".gif"; //<-- isso sim é que é aleatório :P
$name = md5(uniqid(rand(), true)).$ext;

Redimensionar($arquivo, $name, 180, $dir);
}

 

Vai fazer com que qualquer tipo de imagem seja aceito

Compartilhar este post


Link para o post
Compartilhar em outros sites

//$name = md5(uniqid(rand(), true)).".gif"; //<-- isso sim é que é aleatório :P

 

Hehehehe pro ce ve como eu nao quero que nenhuma imagem seja subscrita xP

 

auhhauuhahua

 

Ptz vlw.... Fico mto grato..

 

vou estudar o codigo e suas funcoes pra saber como funciona..

 

Mto obrigado pela atencao...

 

@João Batista Neto

 

@lucaswxp

 

 

>>> OBS: TO VENDO KE VOCE TAMBEM É UM AMANTE DOS TUX DA VIDA :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moderadores desculpem, porem preciso reviver o topico para um pequeno

erro na funcao acima apresentada pelo João Batista.

 

Jão na função que voce me passou estava estudando ela primeira mente antes de testar,

porém quando fui testar apresentou o seguinte erro.

 

Fatal error: Call to undefined function exif_imagetype() in

 

Como ainda não intendo muito sobre o codigo gostaria se possivel de uma pequena ajuda.

 

Fico no aguardo

 

Desde já agradeço

 

Att,

Jonathan! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual versão do php você está usando?

http://br.php.net/exif_imagetype

Compartilhar este post


Link para o post
Compartilhar em outros sites

No link que o William te passou você encontra o seguinte:

 

If the function exif_imagetype() is not available,

you can try the following workaround:

 

if ( ! function_exists( 'exif_imagetype' ) ) {
function exif_imagetype ( $filename ) {
if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
return $type;
}
return false;
}
}

 

Isso deve resolver o problema.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

João obrigado pela ajuda porém não intendi muito este codigo não :S

 

E nem como adptalo para fazer o upload do arquivo para a pasta já redimensionado..

 

To doidao lendo o manutal do php mais estou sem creatividade e informação meio fragmentada...

 

no caso eu só queria saber como redimensionar a imagem de qualquer tipo

PNG, GIF, JPEG essas coisas..

 

no caso eu tava tentando fazer aqui.. com case mais como eu to meio vuado nao sei como fazer..

 

seria algo assim

 

switch(function tipo de imagem){ 
case: "jpg": faz isso....; 
break; 

case: "gif": faz aquilo...; // Aqui seria aquele esquema imagecreatefromgif ou jpg ou png :P dai a funcao redimensionar eu tenho pra executar mais nao to sabendo montar essa funcao aqui direito pra poder redimensionar o arquivo e upar..
break;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa gente ...

 

Consegui em partes resolver mais como a vida é cheia de obstaculos agente tem que ir superando...

dei uma pesquisada na internet de como se fazer um case legalzinho e consegui fazer assim

 

		

               switch($arquivo['type']){

	case "image/jpeg":
		require("noticias/func_jpg.php");
		$name = md5(uniqid(rand(), true)).".jpg";
		Redimensionarjpg($arquivo, $name, 150, $dir);
		Redimensionarjpg($arquivo, $name, 450, $dir2);

		break;

	case "image/gif":
		require("noticias/func_gif.php");
		$name = md5(uniqid(rand(), true)).".gif";
		Redimensionargif($arquivo, $name, 150, $dir);
		Redimensionargif($arquivo, $name, 450, $dir2);

		break;

	case "image/png":
		require("noticias/func_png.php");
		$name = md5(uniqid(rand(), true)).".png";
		Redimensionarpng($arquivo, $name, 150, $dir);
		Redimensionarpng($arquivo, $name, 450, $dir2);

		break;
	}

 

Tudo certo o GIF upo e redimensiono sem animação :P normal

O Jpeg deu certinho

O png também mais foi ai que surgio a grande questao.

 

Porque quando ele faz o resize o fundo transparente ficou em preto?..

Doidera nao?..rsrsrs :P

 

Se alguem puder ajudar a solucionar essa questão vai fechar redondo o que necessito

e tambem disponibilizar pras outras pessoas que precisam do mesmo que eu :P

 

Att,

Jonathan! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo amigo,

 

Quando você envia um arquivo usando um formulário uma matriz associativa é criada:

 

$name = $_FILES[ 'nomedocampo' ][ 'name' ]; //<== Esse é o nome da imagem que o usuário escolheu
$tmp_name = $_FILES[ 'nomedocampo' ][ 'tmp_name' ]; //<== Esse é o nome da imagem que acabou de chegar no seu servidor
$type = $_FILES[ 'nomedocampo' ][ 'type' ]; //<== Esse é o mime/type da imagem

Quando você envia uma imagem, o valor do $type será alguma coisa assim:

 

image/jpg ou image/jpeg para .JPG

image/gif

image/png

.....

 

Então o que você precisa fazer é verificar qual o tipo da imagem que chegou, utilizando esse campo:

 

if( preg_match( '/image\/(.*)/' , $arquivo[ 'type' ] , $mtc ) ){
switch ( $mtc[ 1 ] ){
case 'jpg':
case 'jpeg':
echo 'Chegou um JPG !!!';
break;
case 'gif':
echo 'Chegou um GIF !!!';
break;
case 'png':
echo 'Chegou um PNG !!!';
break;
default:
echo 'Chegou alguma coisa diferente :P';
$ext = ".{$mtc[ 1 ]}";
}
}

 

Veja no código acima, que a primeira condição imposta é que o arquivo que acabou de chegar SEJA uma imagem, ai utilizamos o parênteses para capturar o que vier depois:

 

image\/(.*) <== Isso fará que com que o preg_match verifique se o type começa com image/, capture qualquer coisa que estiver depois do / e coloque o que capturou dentro da variável $mtc.

 

Agora, com o valor em $mtc é só fazer a comparação que você precisar e chamar a função adequada.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana João,

 

o codigo ficaria assim entao?

 


if( preg_match( '/image\/(.*)/' , $arquivo[ 'type' ] , $mtc ) ){
	 switch ( $mtc[ 1 ] ){
	 case 'jpg':
	 case 'jpeg':
		 require("noticias/func_jpg.php");
		 $name = md5(uniqid(rand(), true)).".jpg";
		 Redimensionarjpg($arquivo, $name, 150, $dir);
		 Redimensionarjpg($arquivo, $name, 450, $dir2);
	 break;
	 case 'gif':
		 require("noticias/func_gif.php");
		 $name = md5(uniqid(rand(), true)).".gif";
		 Redimensionargif($arquivo, $name, 150, $dir);
		 Redimensionargif($arquivo, $name, 450, $dir2);
	 break;
	 case 'png':
		 require("noticias/func_png.php");
		 $name = md5(uniqid(rand(), true)).".png";
		 Redimensionarpng($arquivo, $name, 150, $dir);
		 Redimensionarpng($arquivo, $name, 450, $dir2);
	 break;

	 default:
	 echo 'Chegou alguma coisa diferente :P';
	 $ext = ".{$mtc[ 1 ]}";
	 }

 

Será que eu intedi certo?..

Pois estou com extrema dificuldade... :P Deus porque você nao me deu um cerebro?.. hahahaha

 

 

Outra coisa se você puder me ajudar ficarei muito grato no codigo da funcao redimensionar

lá em cima esta dando os erros abaixo. No caso troquei aqueles comandinhos tipo imagecreatefromPNG <

dos que seriam do GIF e do JPG e voltou este erro sendo que o JPG e o GIF estao utilizando a mesma base..!!

 

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 10

Warning: imagepng(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 12

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 14

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 10

Warning: imagepng(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 12

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\AppServ\www\maxsis\restrito\noticias\func_png.php on line 14

 

Bom desde já agradeço.

 

att,

Jonathan!

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.