Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/04/2008, 10:29
xamamo
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
Crear Thumbnails cuando recupero imágenes con un While

Hola a todos,

Este fin de semana me he puesto con el tema de las Thumbnails, ya que lo tenia pendiente.

Gestiono mi propio blog de noticias y las mismas se me guardan en mi DB con: 'id', 'titulo', 'descripcion', 'fecha' e 'imagen'. La imagen se me guarda en tamaño original, y la recupero de forma más reducida aplicando un widht y height (algo guarro para los tiempos que corren).

Recupero las mismas así:

Código:
<? $res=mysql_query("select * from noticias order by fecha desc");
while($fila=mysql_fetch_array($res))
	{

<?echo $fila["titulo"];?><br>
<?echo $fila["descripcion"];?><br>
<?echo $fila["fecha"];?><br>
<img widht="200" height="200" src="http://www.forosdelweb.com/images/<?echo $fila["imagen"];?>">
                 }
?>
El caso está en que no consigo aplicar los ejemplos que veo en mi While. Os pongo uno de los ejemplos más sencillos que he visto:

Código:
<?
include("easythumbnail.class.php");

$thumb= new EasyThumbnail("http://www.forosdelweb.com/images/Accion206.jpg", "upload/mini.jpg", 200);
if ($thumb)
    echo "Miniatura gerada correctamente!<br>";
else
    echo $thumb->getErrorMsg();
?>
<img src="http://www.forosdelweb.com/images/Accion206.jpg">&nbsp;<img src="upload/mini.jpg">
Más abajo muestro el código del easythumbnail.class.php; El caso está en que con esté código tan sencillo me genera el thumbnail y con la úlima línea puesta veo las dos imágenes.

El caso está en que no se compaginar la $thumb con el: <?echo $fila["imagen"];?> de mi código.

Alguién con conocimientos avanzados que me pueda echar un cable?

gracias!!




Código del easythumbnail.class.php:

Código:
<?
/*
EasyThumbnail - versão 0.1 - Por Rogério Bragil  - Esta classe
cria um thumbnail de uma imagem através de um cálculo de aproximação. Você
pode criar miniaturas de imagens de diferentes tamanhos que o resultado será
uma coleção de thumbnails de dimensões parecidas. Ideal para albuns de fotos,
onde basta você fazer o upload da imagem e deixar a classe gerar o thumbnail.
OBS: trabalha com jpg e png somente. 

  e-mail: [email protected] - Qualquer sugestão, dúvida ou crítica serão bem aceitos!
*/
class EasyThumbnail
{
    private $debug= true;
    private $errflag= false;
    private $ext;
    private $origem;
    private $destino;
    private $errormsg;
    
    function __construct($imagem, $destino, $aprox)
    {
        // se o arquivo não existir, erro
        if (!file_exists($imagem))
        {
            $this->errormsg= "Arquivo não encontrado.";
            return false;
        }
        else
        {
            $this->origem= $imagem;
            $this->destino= $destino;
        }
        // obtém a extensão do arquivo
        if (!$this->ext= $this->getExtension($imagem))
        {
            $this->errormsg= "Tipo de arquivo inválido.";
            return false;
        }
        // gera a imagem do thumbnail com o caminho e nome do arquivo especificados
        $this->createThumbImg($aprox);
    }
    
    // retorna as dimensões (x,y) do thumbnail a ser gerado
    public function getThumbXY($x, $y, $aprox)
    {
         if ($x >= $y)
        {
            if ($x > $aprox)
            {
                $x1= (int)($x * ($aprox/$x));
                $y1= (int)($y * ($aprox/$x));
            }
            else
            {
                $x1= $x;
                $y1= $y;
            }
        }
        else
        {
            if ($y > $aprox)
            {
                $x1= (int)($x * ($aprox/$y));
                $y1= (int)($y * ($aprox/$y));
            }
            // Caso a imagem seja menor do que
            // deve ser aproximado, mantém tamanho original para o thumb.
            else
            {
                $x1= $x;
                $y1= $y;
            }
        }
        $vet= array("x" => $x1, "y" => $y1);
        return $vet;
    }
    
    // cria a imagem do thumbnail
    private function createThumbImg($aprox)
    {
        // imagem de origem
        $img_origem= $this->createImg();

        // obtém as dimensões da imagem original
        $origem_x= ImagesX($img_origem);
        $origem_y= ImagesY($img_origem);
        
        // obtém as dimensões do thumbnail
        $vetor= $this->getThumbXY($origem_x, $origem_y, $aprox);
        $x= $vetor['x'];
        $y= $vetor['y'];
        
        // cria a imagem do thumbnail
        $img_final = ImageCreateTrueColor($x, $y);
        ImageCopyResampled($img_final, $img_origem, 0, 0, 0, 0, $x+1, $y+1, $origem_x, $origem_y);
        // o arquivo é gravado
        if ($this->ext == "png")
            imagepng($img_final, $this->destino);
        elseif ($this->ext == "jpg")
            imagejpeg($img_final, $this->destino);
    }
    
    // cria uma imagem a partir do arquivo de origem
    private function createImg()
    {
        // imagem de origem
        if ($this->ext == "png")
            $img_origem= imagecreatefrompng($this->origem);
        elseif ($this->ext == "jpg" || $this->ext == "jpeg")
            $img_origem= imagecreatefromjpeg($this->origem);
        return $img_origem;
    }
    
    // obtém a extensão do arquivo
    private function getExtension($imagem)
    {
        // isso é para obter o mime-type da imagem.
        $mime= getimagesize($imagem);

        if ($mime[2] == 2)
        {
           $ext= "jpg";
           return $ext;
        }
        else
        if ($mime[2] == 3)
        {
           $ext= "png";
           return $ext;
        }
        else
           return false;
    }
    
    // mensagem de erro
    public function getErrorMsg()
    {
        return $this->errormsg;
    }
    
    public function isError()
    {
        return $this->errflag;
    }
}
?>

Última edición por xamamo; 13/04/2008 a las 10:32 Razón: ampliación de las explicaciones