ARGENTOP2P

Soporte, Ayuda y Consultas => Programación en General => Mensaje publicado por: El_Pablo en Julio 22, 2006, 02:04:50

Título: (PHP)Con imagenes...
Publicado por: El_Pablo en Julio 22, 2006, 02:04:50
Hola gente. les cuento mi problema y luego les pongo el codigo.
Resulta que con rejunte de varios de codigos de internet mas un manual que tengo aca en mi casa estuve armando un codigo para que el script me recorra todo un directorio de imagenes y cree las minis (thumbs). mas adelante tambien pienso hacer la galeria automatica, pero antes quiero terminar con el tema de las minis.
Resulta que las hace, pero me hace minis de todos los archivos que encuentra. es decir, que si en el directorio de las fotos, por casualidad hay archivos en php, tambien me crea su mini jajaj (por ej: thumb_pagina.php).
y otro problema que me presenta, el mayor, es que me repite el while ilimitadas veces, hasta que cancele la ejecucion de la pagina. como puedo frenar eso?

desde ya muchas gracias, aca les va el codigo:

<?
$dir = opendir(".");
while($archivo = readdir($dir))
{
/* USAR EN CASO NECESARIO
$nombre = explode(".", $archivo);
$parte1 = $nombre[0];
$parte2 = $nombre[1];*/

$nombre_imagen = "$archivo";
//indico origen
$imagen_origen = imagecreatefromjpeg($nombre_imagen);
//saco datos
$tam_ancho = imagesx($imagen_origen);
$tam_alto = imagesy($imagen_origen);
//creo la imagen destino con las medidas
$imagen_destino = imagecreatetruecolor(130, 87);
imagecopyresized($imagen_destino,$imagen_origen,0,0,0,0,130,87,$tam_ancho,$tam_alto);
//guardamos la imagen, con un nombre distinto, pero a la vez q me haga acordar a que imagen corresponde
$nombre_destino = "thumb_".$nombre_imagen."";
//guardamos la imagen generada
@imagejpeg($imagen_destino,$nombre_destino,100);
//mostramos la imagen generada
@imagejpeg($nombre_destino,"",100);
//destruimos
imagedestroy($imagen_destino);
}
?>


saludos!
el_pablo
Título: Re: (PHP)Con imagenes...
Publicado por: Predicador en Julio 22, 2006, 05:42:19
hola, el problema que tenias es que:
1- no controlabas que las cosas se hagan solo sobre archivos y no directorios.
2- no controlabas que los archivos sean imagenes (.jpg en este caso).
3- la condicion del while no estaba del todo bien.

<?
$dir = opendir(".");
while($archivo = readdir($dir) !== false)
{
  /* USAR EN CASO NECESARIO
  $nombre = explode(".", $archivo);
  $parte1 = $nombre[0];
  $parte2 = $nombre[1];*/
  if( $archivo != "." && $archivo != ".." && substr($archivo, -1, 3) == "jpg"){ // para evitar recorrer todos los direcotrios y tomar solo imagenes
$nombre_imagen = "$archivo";
//indico origen
$imagen_origen = imagecreatefromjpeg($nombre_imagen);
//saco datos
$tam_ancho = imagesx($imagen_origen);
$tam_alto = imagesy($imagen_origen);
//creo la imagen destino con las medidas
$imagen_destino = imagecreatetruecolor(130, 87);
imagecopyresized($imagen_destino,$imagen_origen,0,0,0,0,130,87,$tam_ancho,$tam_alto);
//guardamos la imagen, con un nombre distinto, pero a la vez q me haga acordar a que imagen corresponde
$nombre_destino = "thumb_".$nombre_imagen."";
//guardamos la imagen generada
@imagejpeg($imagen_destino,$nombre_destino,100);
//mostramos la imagen generada
@imagejpeg($nombre_destino,"",100);
//destruimos
imagedestroy($imagen_destino);
  }
}
?>

baii y espero que ande, ni tiempo de revisarlo mas, me tengo que ir.
Título: Re: (PHP)Con imagenes...
Publicado por: Camello_AR en Julio 22, 2006, 12:58:13
yo ahora no me acuerdo bien, pero si haces un conteo de archivos y metes un for??


//$archivos es el total de archivos del directorio no me acuerdo como obtener la info
for ($i=1;$i=$archivos;$i++) {
//rutina que verifica si $archivo[$i] es jpg y lo muestra
}


sugerencia para arrancar
Título: Re: (PHP)Con imagenes...
Publicado por: Camello_AR en Julio 22, 2006, 13:02:11
sino

http://ar.php.net/manual/es/function.readdir.php
Título: Re: (PHP)Con imagenes...
Publicado por: El_Pablo en Julio 22, 2006, 14:27:11
no hubo caso gente...
me muestra una page totalmente en blanco y no hace el while (con lo predicador)...
y lo de camello no sabria bien donde meterlo  :-[ :-[

me esta quemando el coco esto :P

igualmente gracias por la dedicacion...
saludos
pablo
Título: Re: (PHP)Con imagenes...
Publicado por: flasheadito en Julio 22, 2006, 16:05:42
mira, te paso un codigo que si lo modificas un poco capaz te sirve.
esta andando aca thumbnails (http://www.flasheadito.com.ar/trash/thumb/thumb.php)
espero te sirva


<?php
function make_thumb ($img_src$img_th)
{
 
// config del server 
 
$gd_version 2;
 
$thumb_on 'x';
 
$thumb_size 100;
 
$quality 30;

 
$img_size GetImageSize ($img_src);
 
$img_in ImageCreateFromJPEG ($img_src);

 if (
$thumb_on == 'y')
 {
 
$img_x = ($thumb_size/$img_size[1]) * $img_size[0];
 
$img_y $thumb_size;
 }
 else
 {
 
$img_y = ($thumb_size/$img_size[0]) * $img_size[1];
 
$img_x $thumb_size;
 }

 if (
$gd_version == '1')
 {
 
$img_out ImageCreate($img_x$img_y);
 
ImageCopyResized ($img_out$img_in0000$img_x$img_y$img_size[0], $img_size[1]);
 }
 elseif (
$gd_version == '2')
 {
 
$img_out ImageCreateTrueColor($img_x$img_y);
 
ImageCopyResampled ($img_out$img_in0000$img_x$img_y$img_size[0], $img_size[1]);
 }

 
ImageJPEG ($img_out$img_th$quality);
 
ImageDestroy ($img_out);
 
ImageDestroy ($img_in);
}


if (isset (
$_FILES['image']['name']))
{
 
$fn $_FILES['image']['name'];
 
$src 'images/'.$fn;
 
$th 'thumbs/'.$fn;
 if (!@
move_uploaded_file ($_FILES['image']['tmp_name'], $src)) die ('Can not upload file...');
 
 
make_thumb ($src$th);
 echo 
"Done!<BR>Original Image:<img src=\"$src\"><BR>Thumbnail Image:<img src=\"$th\">";
}
?>


<form enctype="multipart/form-data" action="thumb.php" method="post">
Thumbnail this file: <input name="image" type="file">
<input type="submit" value="Send File">
</form>

Título: Re: (PHP)Con imagenes...
Publicado por: Camello_AR en Julio 22, 2006, 18:02:10
Lo primero mio en lugar del while
Título: Re: (PHP)Con imagenes...
Publicado por: Predicador en Julio 23, 2006, 06:57:18
Hola, acabo de hacer un prueba y anda, lo que si hay que hacer un par de cambios, el while debe ser de la forma:
while($archivo = readdir($dir))
tal cual como vos lo tenias al comienzo.

y el if debe ser de la forma:
  if( $archivo != "." && $archivo != ".." && substr($archivo, strlen($archivo)-3, 3) == "jpg"){ // para evitar recorrer todos los direcotrios y tomar solo imagenes
ya que el intento de usar substr() de la otra manera no funciono, asi que si o si ademas debo usar strlen()
Ademas pondria al final del todo (fuera del while) un closedir($dir); que no es absolutamente necesario en este caso, pero alienta a las buenas practicas de programacion.
Baii.
Título: Re: (PHP)Con imagenes...
Publicado por: El_Pablo en Julio 23, 2006, 16:36:49
bueno vamos a ver que pasa y dps les cuento
de nuevo, muchas gracias por su tiempo :D

saludos!
pablo
Título: Re: (PHP)Con imagenes...
Publicado por: El_Pablo en Julio 23, 2006, 17:51:42
delujo predicador!!!
mil gracias :D:D
en mi server casero no funca bien pero debe ser por la version que es vieja (ya me pongo a actualizar todo).
pero lo probe en mi host donde alojo mi sitio personal y funciono de maravilla!!!!

de nuevo muchisimas gracias :D:D
un saludo grande!
pablo
Título: Re: (PHP)Con imagenes...
Publicado por: Camello_AR en Julio 23, 2006, 18:06:34
Predi es PHP Hacker

EDIT: PHP Master
Título: Re: (PHP)Con imagenes...
Publicado por: flasheadito en Julio 23, 2006, 19:00:42
sos groso predicador!
Título: Re: (PHP)Con imagenes...
Publicado por: El_Pablo en Julio 29, 2006, 03:37:23
Bueno gracias a todos, pero muchas gracias a Predicador.
Aca les paso como deje el codigo de la creacion de minis de imagenes. Le agrege un par de cosas, que por mas boludas que parezcan sirven :P

<?
//si el directorio para las minis no existe, lo creo
if(!is_dir(minis))
{
mkdir(minis);
}
//abro y listo archivos del directorio
$dir = opendir(".");
while($archivo = readdir($dir))
{
   if( $archivo != "." && $archivo != ".." && substr($archivo, strlen($archivo)-3, 3) == "JPG" or substr($archivo, strlen($archivo)-3, 3) == "jpg"){ // para evitar recorrer todos los direcotrios y tomar solo imagenes
$nombre_imagen = "$archivo";
//indico origen
$imagen_origen = imagecreatefromjpeg($nombre_imagen);
//saco datos
$tam_ancho = imagesx($imagen_origen);
$tam_alto = imagesy($imagen_origen);
//creo la imagen destino con las medidas
$imagen_destino = imagecreatetruecolor(130, 87);
imagecopyresized($imagen_destino,$imagen_origen,0,0,0,0,130,87,$tam_ancho,$tam_alto);
//guardamos la imagen, con un nombre distinto, pero a la vez q me haga acordar a que imagen corresponde
$nombre_destino = "thumb_".$nombre_imagen."";
//guardamos la imagen generada
@imagejpeg($imagen_destino, "minis/$nombre_destino", 100);
//mostramos la imagen generada
@imagejpeg($nombre_destino,"",100);
//destruimos
imagedestroy($imagen_destino);
   }
}
closedir($dir);
//acto a seguir luego de la creacion de las minis, voy a la galeria (construccion)
header("Location: galeria.php");

?>


de mas esta decir que este codigo es solo para imagenes JPG o en su defecto jpg (si, php no me tomaba por igual lo que era minusculas o mayusculas)

ahora estoy haciendo la galeria, que para terminarla a mi gusto me falta una cosa.
Me muestra solo una imagen por fila y quiero me me muestre tres por fila, si alguien puede dar una mano en esto estare agradecito :$ aca les va el codigo:

<?
$dir = opendir(".");
while($archivo = readdir($dir))
{
   if( $archivo != "." && $archivo != ".." && substr($archivo, strlen($archivo)-3, 3) == "JPG" or substr($archivo, strlen($archivo)-3, 3) == "jpg"){ // para evitar recorrer todos los direcotrios y tomar solo imagenes
   ?>
  <title>Galeria powered by El_Pablo</title>
  <table width="130" height="87" border="1" align="center">
  <tr>
    <td><a href="<? echo $archivo ?>" target="_blank"><img src="minis/thumb_<? echo $archivo ?>" width="130" height="87" border="0"></a></td>
  </tr>
</table>
<?
    }
}
closedir($dir);
?>


un saludo a todos y obviamente escucho sugerencias! :D
pablo