como hacer tumbs de imagenes en php

Iniciado por antoni_anemi, 15 Julio 2012, 17:37 PM

0 Miembros y 1 Visitante están viendo este tema.

antoni_anemi

NECESITO AYUDA ESTOY HACIENDO UN PROGRAMA EN PHP QUE CREE IMAGENES TUMBS Y QUE LOS GUARDE EN UN DIRECTORIO ME HACE TODO ME CREA EL DIRECTORIO Y LA IMAGEN TUMBS PERO SOLO ME CREA UNA IMAGEN EN NEGRO NO ME COPIA LA IMAGEN ORIGINAL ESTE ES MI CODIGO OJALA ME PUEDAN AYUDAR



<?php
/**
* @author antonio de jesus cortes lagunes
* @copyright 2012
* este es puro codigo php si desea verlo en el explorador tienes que meterlo en codigo html y
* ademas debes tener instalado php para que pueda ser interpretado.
*
* Ejercicio 4.10: ídem al anterior, pero que si no existe la miniatura de una foto debe de crearla.
* VERSION PARA WINDOWS
*
*/

echo "<h1>Galeria de imagenes con thumbnails</h1>";



function png($foto){
        if (!is_dir('fotos/tumbs')){
        mkdir ('fotos/tumbs', 0777);
    }
    header('Content-Type: image/gif');
$fuente = @imagecreatefrompng($foto);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor(50,50);

imagecopyresampled($imagen,$fuente,0,0,0,0,50,50,$imgAncho,$imgAlto);


imageGif($imagen,"fotos/tumbs/MINI-$foto");
   
}



function jpg($foto){
    if (!is_dir('fotos/tumbs')){
        mkdir ('fotos/tumbs', 0777);
    }
header('Content-Type: image/jpeg');
$fuente = @imagecreatefromjpeg($foto);
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor(50,50);

imagecopyresampled($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);



imagejpeg($imagen,"fotos/tumbs/MINI-$foto");
   
}

function gif($foto){
        if (!is_dir('fotos/tumbs')){
        mkdir ('fotos/tumbs', 0777);
    }
    header('Content-Type: image/gif');
$fuente = @imagecreatefromgif($foto);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor(50,50);

imagecopyresampled($imagen,$fuente,0,0,0,0,50,50,$imgAncho,$imgAlto);


imageGif($imagen,"fotos/tumbs/MINI-$foto");
   
}




function valida_foto($fotos)
{
$rdo=0;
if (ereg("[Jj][Pp][Gg]$", $fotos)) {
    $rdo=1;
    jpg($fotos);
}
if (ereg("[Gg][Ii][Ff]$", $fotos)) {
    $rdo=1;
    gif($fotos);
}
if (ereg("[Pp][Nn][Gg]$", $fotos)){
    $rdo=1;
    png($fotos);
}
if (ereg("[Bb][Mm][Pp]$", $fotos)) {
    $rdo=1;
    bmp($fotos);
}
return $rdo;
}




echo "<table border=1>";
$puntero = opendir('fotos');
$i=1;
while (false !== ($foto = readdir($puntero)))
{
if ($foto!="." && $foto!=".." && valida_foto($foto))
{

if ($i==1)
echo "<tr>";
echo "<td><a href='fotos/tumbs/MINI-$foto'>";
echo "<img src='fotos/$foto' width=100 height=100></img>";

echo "</a></td>";
if ($i==4)
{echo "</tr>"; $i=0;}
$i++;
}
}
closedir($puntero);
echo "</table>";



?>

#!drvy

Hola

Para empezar.... no uses ereg. Es una función marcada como obsoleta a partir de PHP 5.3. Te recomiendo que uses preg_match.
Total, POSIX ERE y PCRE son muy similares.. veras que es fácil.

Otro problema que tienes, es que defines los headers. No hace falta definir los. Y es que, imprimes un echo antes de definir el header (incluso aunque lo hagas después estaría mal...) y eso entra en conflicto pues el navegador primero mira el header y luego el contenido.



El problema principal es que, en las funciones (jpg,bmp,gif,png).. no indicas donde se encuentra la foto original. Solo indicas su nombre. Por tanto, al intentar abrir la foto, PHP busca en el directorio donde esta alojado el script y no en la carpeta fotos.
Código (php,3) [Seleccionar]
function jpg($foto){
    if (!is_dir('fotos/tumbs')){mkdir ('fotos/tumbs', 0777);}
    $fuente = imagecreatefromjpeg($foto);
    $imgAncho = imagesx($fuente);
    $imgAlto =imagesy($fuente);
    $imagen = imagecreatetruecolor(50,50);
    imagecopyresampled($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);
    imagejpeg($imagen,"fotos/tumbs/MINI-$foto");
}


Te dejo a continuación el código funcional.
Código (php) [Seleccionar]
<?php
/**
 * @author antonio de jesus cortes lagunes
 * @copyright 2012
 * este es puro codigo php si desea verlo en el explorador tienes que meterlo en codigo html y
 * ademas debes tener instalado php para que pueda ser interpretado.
 *
 * Ejercicio 4.10: ídem al anterior, pero que si no existe la miniatura de una foto debe de crearla.
 * VERSION PARA WINDOWS
 *
 */

echo "<h1>Galeria de imagenes con thumbnails</h1>";

function 
png($foto){
    if (!
is_dir('fotos/tumbs')){mkdir ('fotos/tumbs'0777);}
    
$fuente = @imagecreatefrompng('fotos/'.$foto);
    
$imgAncho imagesx ($fuente);
    
$imgAlto =imagesy($fuente);
    
$imagen imagecreatetruecolor(50,50);
    
imagecopyresampled($imagen,$fuente,0,0,0,0,50,50,$imgAncho,$imgAlto);
    
imageGif($imagen,"fotos/tumbs/MINI-$foto");
}

function 
jpg($foto){
    if (!
is_dir('fotos/tumbs')){mkdir ('fotos/tumbs'0777);}
    
$fuente imagecreatefromjpeg('fotos/'.$foto);
    
$imgAncho imagesx($fuente);
    
$imgAlto =imagesy($fuente);
    
$imagen imagecreatetruecolor(50,50);
    
imagecopyresampled($imagen,$fuente,0,0,0,0,100,100,$imgAncho,$imgAlto);
    
imagejpeg($imagen,"fotos/tumbs/MINI-$foto");
}

function 
gif($foto){
    if (!
is_dir('fotos/tumbs')){mkdir ('fotos/tumbs'0777);}
    
$fuente = @imagecreatefromgif('fotos/'.$foto);
    
$imgAncho imagesx ($fuente);
    
$imgAlto =imagesy($fuente);
    
$imagen imagecreatetruecolor(50,50);
    
imagecopyresampled($imagen,$fuente,0,0,0,0,50,50,$imgAncho,$imgAlto);
    
imageGif($imagen,"fotos/tumbs/MINI-$foto");
}

function 
valida_foto($fotos){
    
$rdo=0;
    if (
preg_match("/[Jj][Pp][Gg]/"$fotos)){
        
$rdo=1;
        
jpg($fotos);
    }
    if (
preg_match("/[Gg][Ii][Ff]/"$fotos)){
        
$rdo=1;
        
gif($fotos);
    }
    if (
preg_match("/[Pp][Nn][Gg]/"$fotos)){
        
$rdo=1;
        
png($fotos);
    }
    if (
preg_match("/[Bb][Mm][Pp]/"$fotos)){
        
$rdo=1;
        
bmp($fotos);
    }
    return 
$rdo;
}

echo 
"<table border=1>";
$puntero opendir('fotos');
$i=1;
while (
false !== ($foto readdir($puntero))){
    if (
$foto!="." && $foto!=".." && valida_foto($foto)){
        if (
$i==1){
            echo 
"<tr>";
            echo 
"<td><a href='fotos/tumbs/MINI-$foto'>";
            echo 
"<img src='fotos/$foto' width=100 height=100></img>";
            echo 
"</a></td>";
            if (
$i==4){echo "</tr>"$i=0;}
            
$i++;
        }
    }
}
closedir($puntero);
echo 
"</table>";

?>


Saludos