Jump to content


Photo

Ajuda Em Redução De Imagens


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

#1 falito crispim

falito crispim

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Masculino

Posted 06/11/2009, 10:43

Olá

Tenho que reduzir as imagens postadas para uma pasta no servidor pois as imagens serão exibidas com o efeito lightbox e deverão ter o mesmo tamanho ou proporção (caso a largura seja maior que a altura ou vice-versa), no código já tem a função para criar os thumbs, já tentei de muitas maneiras alterar o código mas não consegui nada ainda :(.

Será que alguém poderia dar uma ajuda?

Agradeço desde já!

Segue o código

Arquivo upload.php

<?php include "includes/menuGeral.php"; ?>

<?php

include("includes/conectaBD.php");

/* faz a inserção das fotos no banco e na pasta referente */
$imagem = $_FILES["foto"];
$pasta = "fotos/";
$imagem_nome = $imagem["name"];
$caminho_p = $pasta."thumb_".$imagem_nome;
$caminho_g = $pasta . $imagem_nome;

function reduz_imagem($img, $max_x, $max_y, $nome_foto) {
list($width, $height) = getimagesize($img);
$original_x = $width;
$original_y = $height;
// se a largura for maior que altura
if($original_x > $original_y) {
$porcentagem = (100 * $max_x) / $original_x;
}
// se a altura for maior que a largura
else {
$porcentagem = (100 * $max_y) / $original_y;
}
$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);
$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
$image = imagecreatefromjpeg($img);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);
return imagejpeg($image_p, $nome_foto, 100);
}
$uploadP = reduz_imagem($_FILES["foto"]["tmp_name"], 120, 60, $caminho_p);

$uploadG = move_uploaded_file($imagem["tmp_name"], $caminho_g);

if($uploadP && $uploadG) {
echo "<h3>Foto adicionada!</h3> <p><a href='adicionaFoto.php'>Adicionar foto</a> | <a href='visualizaFotos.php'> Visualizar fotos</a></p>";
}
else {
echo "<p>Falha no upload...";
}

$date = date("d/m/Y");
$id_imagem = $imagem["name"];

/* insere todos os dados no bd */
$sql = "INSERT INTO galeria VALUES";
$sql .= "('','$date','$id_imagem')";
$resultado = mysql_query ($sql);


mysql_close($conectar);
?>

#2 Squall Robert

Squall Robert

    Mr. Squall - Mais Carne do que Osso (hihi)

  • Usuários
  • 507 posts
  • Sexo:Masculino
  • Localidade:Curitiba
  • Interesses:Php ... Php...Php

Posted 09/11/2009, 12:52

man...

ai vai uma classe que redus a imagem do tamnho que vc especificar...
eu desenvolvi essa classe e resolve bem esse tipo de coisa..



<?php
/**
 * @author squall
 * @copyright 2009
 */
class Thumbs
{
	//variaveis necessárias para gerar thumbs
	public $caminho;
	public $nome;
	public $largura_max;
	public $altura_max;
	public $arquivo;
	public $ext;
	public $tipo;
	public $ImagemGerada;
	public function Thumbs()
	{
		// definindo valores padrão de variaveis
		$this->tipo = 1;
		$this->nome = date('YmdHis');
		$this->altura_max = 80;
		$this->largura_max = 250;	
	}
	//preparando imagem 
	public function Prepare()
	{
		// verifica imagem se existe
		if(file_exists($this->arquivo))
		{
			// gerando nome da nova imagem
			$this->NomeImagem();
			// pegando tamanho da imagem
			$img_tamanho = @getimagesize($this->arquivo);
			
			if(!file_exists($this->ImagemGerada) || $img_tamanho[0] > $this->largura_max || $img_tamanho[1] > $this->altura_max)
			{
					// pegando extensão da imagem
					$this->ext = substr($this->arquivo,-3);
					// verificando se o caminho e existente/ se não cria diretório
					$this->CriarDir();
					// gerando imagem
					
					$this->Gerar();
					
					return $this->ImagemGerada;
			}
			else
				return $this->ImagemGerada; // retorno da imagem existente																																
		}
		else
			return false; //retorna false se o arquivo nao for encontrado
	}
	// Gerador de Thumbs
	public function Gerar()
	{
		// se extesão for jpg 
		if($this->ext == "jpg")
		{
			$imagem_orig = @imagecreatefromjpeg($this->arquivo);
		}
		elseif($this->ext=="png")
		{
			$imagem_orig = @ImageCreateFromPNG($this->arquivo);
		}
		elseif($this->ext=="gif")
		{
			$imagem_orig = @ImageCreateFromGIF($this->arquivo);
		}
		// pegando tamanhos da imagem
		$largura_original = @ImagesX($imagem_orig);
		$altura_original = @ImagesY($imagem_orig);
		
		$altura = $altura_original;
		$largura = $largura_original;
		
		if( $largura > $this->largura_max)
		{
			$largura = $this->largura_max;
			$altura = $altura * ($largura / $largura_original);

		}
		if($altura > $this->altura_max)
		{
			$largura = $largura * ($this->altura_max/$altura);
			$altura  = $this->altura_max;
		}
		
		//gerando imagem final
		$imagem_final=@ImageCreateTrueColor($largura,$altura);
		@ImageCopyResampled($imagem_final,$imagem_orig, 0, 0, 0, 0,$largura,$altura,$largura_original,$altura_original);
		$imagem_ext=@substr($this->arquivo,-3);
		// gerando arquivo
		if($this->ext=="jpg")
			@imagejpeg($imagem_final,$this->ImagemGerada,80);
		if($this->ext == "png")
			@imagepng($imagem_final,$this->ImagemGerada);
		if($this->ext == "gif")
			@imagegif($imagem_final,$this->ImagemGerada);
		// destruindo informações desnecessárias
		@imageDestroy($imagem_orig);
		@imageDestroy($imagem_final);
		//retornando caminho da nova imagem
	}
	public function CriarDir()
	{
		if(!is_dir($this->caminho))
		{
			mkdir($this->caminho,0777);		
		}				
	}
	public function NomeImagem()
	{
		//pegando nome original da imagem
		$imagemLimpando = @explode("/",$this->arquivo);
		$imagemNome = $imagemLimpando[(count($imagemLimpando) - 1)];
		// se o tipo for  igual a 1 ele usa o nome original da imagem
		// se não ele usa o timestamp para gerar um nome unico
		if($this->tipo == 1) $imagem_gerada=$this->caminho . $imagemNome;
		else $imagem_gerada = $this->caminho . $this->nome . "." .  $this->ext;
		$this->ImagemGerada = $imagem_gerada;
	}
}
?>

<?php

$squall = new Squall();

$squall->Ajudando("você");

$resultado = $squall->solucao();  ?>

#3 falito crispim

falito crispim

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Masculino

Posted 10/11/2009, 07:13

Tanx Squall;

Eu adaptei o código que eu tinha e deu certo :)
Mas de qualquer forma com certeza seu program vai ser útil em outras situações pois é bem prático!!

Valeu cara!!

Dúvida resolvida!

Té mais




1 user(s) are reading this topic

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

IPB Skin By Virteq