Foros del Web » Programando para Internet » PHP »

Crear Thumbnails cuando recupero imágenes con un While

Estas en el tema de Crear Thumbnails cuando recupero imágenes con un While en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/04/2008, 10:29
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 6 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:01.