Foros del Web » Programando para Internet » PHP »

Problemas creando thumbs con GD

Estas en el tema de Problemas creando thumbs con GD en el foro de PHP en Foros del Web. Hola gente, Este es el script con problemas: Código PHP: <? set_time_limit ( 0 );  //Tiempo de ejecucion ilimitado $dir = $_GET [ "dir" ]; if ( $dir != ...
  #1 (permalink)  
Antiguo 26/05/2005, 07:56
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años
Puntos: 0
Exclamación Problemas creando thumbs con GD

Hola gente,

Este es el script con problemas:

Código PHP:
<?
set_time_limit
(0); //Tiempo de ejecucion ilimitado
$dir=$_GET["dir"];
if (
$dir!="")
    {
      
$directorio dir("$dir");
      while(
$fichero=$directorio->read()) 
          {
          if (
$fichero!="." && $fichero!=".." && $fichero!="thumbs" && $fichero!="agua")
      {
      
$archivo explode("."$fichero);
      
$origen_nombre=$archivo['0'];
      
$origen=$dir.$fichero;
      
$destino=$dir.$origen_nombre."b.jpg";
      
$destino_temporal=tempnam("/tmp","tmp");
      
redimensionar_jpeg($origen$destino_temporal640480100);
      
      
// guardamos la imagen
      
$fp=fopen($destino,"w");
      
fputs($fp,fread(fopen($destino_temporal,"r"),filesize($destino_temporal)));
      
fclose($fp);

      
// mostramos la imagen
      
chmod($destino,777);
      echo 
"<img src='$destino' border=\"0\">&nbsp;&nbsp;";
      }
          }
      
$directorio->close();
    }
    else
    { 
?>
    <FORM action="crear_thumbs.php" method="GET">
           Nomnbre del directorio: <INPUT type="text" name="dir" value="fotos/" size="40">  <INPUT type="submit" value="Enviar">
        </FORM>
    <?php }
    

function 
redimensionar_jpeg($img_original$img_nueva$img_nueva_anchura$img_nueva_altura$img_nueva_calidad)
      { 
    
// crear una imagen desde el original 
    
$img ImageCreateFromJPEG($img_original); 
    
// crear una imagen nueva 
    
$thumb imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura); 
    
// redimensiona la imagen original copiandola en la imagen 
    
ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img)); 
     
// guardar la nueva imagen redimensionada donde indicia $img_nueva 
    
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
    
ImageDestroy($img);
      }
 
?>
Este script lo que hace es guardar una copia de la foto original pero en 640x480 y con una b al final. Pj: Si el original es foto.jpg, la copia es fotob.jpg
El problema surge cuando hay muchas fotos en la carpeta donde estan las fotos (si hay pocas fotos funciona barbaro), me toma como foto original a las copias y me empieza a crear archivos fotobb.jpg, fotobbb.jpg, etc.... y esto me cuelga el server ya que se forma un bucle muuuuuy largo.
Hay alguna forma de evitar eso con alguna funcion o algo?

Saludos y espero sus respuestas,
Gracias
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
  #2 (permalink)  
Antiguo 26/05/2005, 08:17
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Como metes todo en una sola carpeta tienes algunas opciones:
1- Cambia las copias a otra carpeta a la que le puedes poner el nombre de la imagen principal y dentro las imagenes con la letra "b" al final.
2- Cambiale el nombre a las copias para que sean imagen_b.jpg asi puedes detectar si el nombre tiene el signo "_" y esas no copiarlas, este proceso coje mas tiempo y memoria en recursos ya que tendra que analizar cada imagen del folder.

Con todo eso propongo la opcion 1 es mas ordenado.
  #3 (permalink)  
Antiguo 26/05/2005, 09:17
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años
Puntos: 0
Muchas gracias dwaks, voy a optar por la 1.
Me gustaria saber, si alguien sabe, porque sucede esto. Ya que cuando hay pocas fotos funciona barbaro.

Saludos
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
  #4 (permalink)  
Antiguo 26/05/2005, 09:35
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Eso sucede porque al momento de guardar la copia en el folder donde estan las originales todas juntas el script no sabe identificar cual es copia y cual es original y toma todos por original y hace el proceso de agregar la b.

Si no separas vera todo como original ya que nada le dice al script, mira este es original y este es copia.

Quizas si le metes una linea:
<?php
list($width,$height) = getimagesize($image);
?>
esa linea toma el ancho y alto de la imagen que tome del directorio a medida que el bucle avanza, asi puedes decir:
<?php
if($width==640 && $height==480){
#entonces no le crea una copia porque ya es copia.
}
?>

Son solo ideas pero sigo con la idea de que dividas las carpetas.
  #5 (permalink)  
Antiguo 26/05/2005, 10:23
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años
Puntos: 0
Ok, muchas gracias por tu ayuda dwaks.
Hare lo de guardarlas en una carpeta diferente.

Saludos
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
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 00:40.