(PHP)Con imagenes...

Publicado por El_Pablo, Julio 22, 2006, 02:04:50

Tema anterior - Siguiente tema

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

El_Pablo

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

Predicador

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.
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

Camello_AR

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

Camello_AR


El_Pablo

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

flasheadito

mira, te paso un codigo que si lo modificas un poco capaz te sirve.
esta andando aca thumbnails
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>


Camello_AR

Lo primero mio en lugar del while

Predicador

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.
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

El_Pablo

bueno vamos a ver que pasa y dps les cuento
de nuevo, muchas gracias por su tiempo :D

saludos!
pablo

El_Pablo

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

Camello_AR

#10
Predi es PHP Hacker

EDIT: PHP Master

flasheadito


El_Pablo

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