Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Henrique_196640

Como redimensionar imagem para getimagesize ?

Recommended Posts

Hoje tá difícil esse negocio de upload de imagem por causa das câmeras com muitos pixels HEHE,,,

e eu não consegui fazer um redimensionamento de imagem nesse Script...

Esta dando um erro na linha getimagesize($foto["tmp_name"]) por causa da imagem ser muito grande,

 

ENTÃO? O q vamos fazer pra não dar esse erro, e todas as fotos serem cadastradas?

 

Ou então fazer mensagens de erro avisando o tamanho da imagem né?

<?php
///CONEXAO
$sql = mysql_connect('localhost','root','') or die (mysql_error());

// RECUPERA OS DADOS DOS CAMPOS
	/// BOTÃO
	$enviar = $_POST['enviar'];
   /// FOTO
    $foto = $_FILES["foto"];
		// SE A FOTO TIVER SIDO SELECIONADA
	if (!empty($foto["name"])) {
    	// VERIFICA SE O ARQUIVO É UMA IMAGEM
    	if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto["type"])){
     	   $error[1] = "Isso não é uma imagem.";
   	 	} 

		// PEGA AS DIMENSÕES DA IMAGEM
		$dimensoes = getimagesize($foto["tmp_name"]);
	
		{
			// Pega extensão da imagem
			preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

        	// Gera um nome único para a imagem
        	$nome_imagem = md5(uniqid(time())) . "." . $ext[1];

        	// Caminho de onde ficará a imagem
        	$caminho_imagem = "fotos/" . $nome_imagem;

			// Faz o upload da imagem para seu respectivo caminho
			move_uploaded_file($foto["tmp_name"], $caminho_imagem);
		}
			
	} 

//////////////////INSERIR NA TABELA
$aobd = mysql_query("INSERT INTO test.imagens (id,foto) VALUES ('','$nome_imagem')")or die (mysql_error());

/////////////////MOSTRA IMAGEM
$imagem = mysql_query("SELECT * FROM test.imagens WHERE id LIKE '%'");
while ($foto = mysql_fetch_object($imagem)){
 /////IMPRIME A IMAGEM
 echo "<img src='fotos/".$foto->foto."' width='300' height='300' />";
}

mysql_close($sql)
?>
<form action="" method="post" enctype="multipart/form-data" name="form1">
  <input type="file" name="foto" id="foto">
  <input type="submit" name="enviar" id="enviar" value="Submit">
</form>

 



Cara consegui modificar o PHP.INI, a linha upload_max_filesize = 2M, para upload_max_filesize = 10M..


Não deu mais o erro... Terei q modificar mais alguma linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No php.ini também tem o tamanho que pode ser transferido pelo post, o que eu uso são esses:

 

max_file_uploads = 300
upload_max_filesize = 500M
post_max_size = 400M
max_execution_time = 300 //tempo de execução, caso a internet seja lenta para o upload

Hoje eu uso o timthumb, que ele redimensiona dinamicamente no server-side. Mas se você quer redimensionar antes, para salvar espaço no servidor, a lógica é essa:

 

Se você quiser redimensionar pela largura, 600px de largura por exemplo, a unica coisa que você tem que calcular é a altura.

 

Para achar a altura é só fazer (nova-largura * altura-original) / largura-original, que vai resultar na altura da nova imagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por causa dela ser grande?

Pelo que eu estou vendo você está tentando trabalhar com a imagem direto do diretório temporário (tmp),

Para trabalhar com qualquer arquivo você primeiro tem que mover ele para um diretório

$de = arquivo['tmp_name'];
$nome = imagem.jpg';
$para = 'diretorio/'.$nome;
move_uploaded_file($de, $para);

Compartilhar este post


Link para o post
Compartilhar em outros sites

@João

 

max_execution_time não tem nada a ver com conexão lenta para upload.

 

Este parâmetro define o tempo de execução do script em depois que o Web Server (Apache/ISS/Outros) redireciona a chamada para o módulo PHP, execução que começa depois que o upload/requisição está completa.

 

Inclusive, deixá-lo com um valor alto sem entender os riscos é uma falha grave para sua aplicação. E isto também vale para os outros parâmetros. Pergunta simples: você chegou a fazer um teste simples, de 10 usuários simultâneos enviando 100 arquivos de 30 mb cada para o seu site para ver o que acontece?

 

@William

 

Não, não é preciso mover a imagem para outro diretório para poder trabalhar com ela.

Inclusive, não recomendo isso, porque se você esquecer de apagar a imagem por qualquer motivo, ela vira lixo, enquanto que, se deixar no diretorio temporário, o próprio PHP se encarrega de apaga-la ao final da execução do script.

 

Exemplo com ImageMagick

 

// diretorio de instalação do imagemagick
$magickPath = '/usr/bin/';

// se enviou o arquivo
if(isset($_FILES['arquivo']['tmp_name']) && is_uploaded_file($_FILES['arquivo']['tmp_name'])){
  // se for uma imagem
  if(preg_match('@image/.*?@', $_FILES['arquivo']['type'])){
    // pega a extensão da imagem
    $ext = pathinfo($_FILES['arquivo']['name'], PATHINFO_EXTENSION);
    // endereço da imagem final
    $saida = '/minha/pasta/com/os/arquivos/redimensionados/final.'.$ext;
    // linha de comando a ser executada
    $cmd = sprintf('%s/convert "%s" -resize 500x500 "%s" 2>&1', $magickPath, $_FILES['arquivo']['tmp_name'], $saida);
    // faz um escape do comando, para evitar problemas
    $cmd = escapeshellcmd($cmd);
    // executa
    exec($cmd, $output, $return_val);
    
    // exibe a saida
    print_r($output);
    print_r($return_val);
  }
}


Um adendo:

 

O ImageMagick, com o comando que passei, já faz o resize mantendo o aspect ratio da imagem.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

@hufersil

 

Tenho que instalar o ImageMagick?

 

Qual seria a melhor vesão ?

http://pecl.php.net/package/imagick

 

Vou ler esse a guia pra entender mais sobre ImageMagick

http://php.net/manual/pt_BR/imagick.setup.php

 

 

Valeu ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente, a atual tem menos bugs/problemas.

Sugiro que você instale a mais recente.

 

Porém, não esqueça de averiguar qual versão está instalada em seu host, para não utilizar localmente métodos/funções que não estejam disponíveis quando a aplicação for publicada.

 

Como exemplificado, não precisa por via de regra utilizar a extensão do PHP.

Você poderá utilizar linha de comando para executar os binários do ImageMagick (se o seu host der permissão para isso).

 

@braços

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.