Foros del Web » Programando para Internet » PHP »

Hacer Miniatura con libreria GD?

Estas en el tema de Hacer Miniatura con libreria GD? en el foro de PHP en Foros del Web. Hola Estoy siguiendo este tutorial: http://www.forosdelweb.com/f18/faqs-...tml#post282620 para generar un Thumbnail (imagen pequeña) en PHP usando GD Desde la imagen grande en carpeta "images" a imagen ...
  #1 (permalink)  
Antiguo 22/01/2008, 10:29
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Hacer Miniatura con libreria GD?

Hola

Estoy siguiendo este tutorial:
http://www.forosdelweb.com/f18/faqs-...tml#post282620
para generar un Thumbnail (imagen pequeña) en PHP usando GD
Desde la imagen grande en carpeta "images" a imagen pequeña en carpeta "thumbs"

Introduzco 1234.jpg y le doy al submit
... pero me da este error:

1234.jpg // esto lo hago con un echo para estar seguro que el nombre esta bien
No se ha podido crear el directorio .images/thumbs/

el codigo es: index.php

Código:
<?php
if(isset($_POST['submitted'])){

echo $_POST['imagen']."<br/>";//para estar seguro que el nombre está correcto

function thumbjpeg($imagen,$altura) { 
     // Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande". 
     $dir_thumb = "thumbs/"; 
     // Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg", 
     // el thumbnail se llamaría "tn_imagen1.jpg" 
     $prefijo_thumb = "tn_"; 

     // Aquí tendremos el nombre de la imagen. 
     $nombre=basename($imagen); 
     // Aquí la ruta especificada para buscar la imagen. 
     $camino=dirname($imagen)."http://www.forosdelweb.com/images/"; 

     // Intentamos crear el directorio de thumbnails, si no existiera previamente. 
     if (!file_exists($camino.$dir_thumb)) 
          @mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb); 

     // Aquí comprovamos que la imagen que queremos crear no exista previamente 
     if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) { 
          echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n"; 
          $img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n"); 

          // miramos el tamaño de la imagen original... 
          $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n"); 

          // intentamos escalar la imagen original a la medida que nos interesa 
          $ratio = ($datos[1] / $altura); 
          $anchura = round($datos[0] / $ratio); 

          // esta será la nueva imagen reescalada 
          $thumb = imagecreatetruecolor($anchura,$altura); 

          // con esta función la reescalamos 
          imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); 

          // voilà la salvamos con el nombre y en el lugar que nos interesa. 
          imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 
} 
$imagen=$_POST['imagen'];
thumbjpeg($imagen, 125);

}//end if submitted
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
<head>
</head>
<body>
<form action="index.php" method="post">
<input name="imagen" type="text">
<input name="submitted" type="hidden">
<input name="enviar" type="submit">
</form>
</body> 
</html>
y como tengo las carpetas y archivos lo pueden ver en este screenshot:



o sea: en la raiz estan: "index.php" y la carpeta "images", y dentro de images esta la imagen "1234.jpg" y la carpeta "thumbs"

Última edición por chefnelone; 22/01/2008 a las 10:47
  #2 (permalink)  
Antiguo 22/01/2008, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Hacer Miniatura con libreria GD?

Dos cosas, una, no estas enviando el archivo correctamente, tu formulario debe de tener el encryption correcto:
Código:
<form action="index.php" method="post" enctype="multipart/form-data">
Segundo, debes de rescatar el archivo via $_FILES no $_POST.

Tercero, comprueba la ruta correctamente, ya que al parecer esta tratando de accesar directo, pero puedes que éstes en otro directorio (prueba usando get_cwd() ).

Saludos.
  #3 (permalink)  
Antiguo 22/01/2008, 10:53
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: Hacer Miniatura con libreria GD?

creo que no estoy entendiendo el script entonces:

Yo pensé que la imagen grande debia estar ya en el servidor. Y con esto estaba haciendo una miniatura de ella.

PERO por lo que me dices el script sube la imagen grande y a la vez hace una miniatura no??

Me explicaria donde debo usar get_cwd()

gracias
  #4 (permalink)  
Antiguo 22/01/2008, 11:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Hacer Miniatura con libreria GD?

Tienes razón, get_cwd lo usas para ver en que directorio estas y así calculas la ruta a tu carpeta de thumb.

Saludos.
  #5 (permalink)  
Antiguo 22/01/2008, 11:02
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: Hacer Miniatura con libreria GD?

no puedo hacer funcionar el get_cwd();
he puesto:
echo get_cwd();
al inicio del codigo pero no me funciona


Cambié el codigo pero me sigue dando el mismo error:

No se ha podido crear el directorio .images/thumbs/

Codigo
Código:
<?php
if(isset($_POST['submitted'])){
function thumbjpeg($imagen,$altura) { 
     // Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande". 
     $dir_thumb = "thumbs/"; 
     // Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg", 
     // el thumbnail se llamaría "tn_imagen1.jpg" 
     $prefijo_thumb = "tn_"; 

     // Aquí tendremos el nombre de la imagen. 
     $nombre=basename($imagen); 
     // Aquí la ruta especificada para buscar la imagen. 
     $camino=dirname($imagen)."http://www.forosdelweb.com/images/"; 

     // Intentamos crear el directorio de thumbnails, si no existiera previamente. 
     if (!file_exists($camino.$dir_thumb)) 
          @mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb); 

     // Aquí comprovamos que la imagen que queremos crear no exista previamente 
     if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) { 
          echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n"; 
          $img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n"); 

          // miramos el tamaño de la imagen original... 
          $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n"); 

          // intentamos escalar la imagen original a la medida que nos interesa 
          $ratio = ($datos[1] / $altura); 
          $anchura = round($datos[0] / $ratio); 

          // esta será la nueva imagen reescalada 
          $thumb = imagecreatetruecolor($anchura,$altura); 

          // con esta función la reescalamos 
          imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]); 

          // voilà la salvamos con el nombre y en el lugar que nos interesa. 
          imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 
} 
$imagen=$_FILES['imagen'];
thumbjpeg($imagen, 125);

}//end if submitted
?>
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
</head>
<body>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="imagen">
<input name="submitted" type="hidden">
<input name="enviar" type="submit">
</form>
</body> 
</html>

Última edición por chefnelone; 22/01/2008 a las 11:21
  #6 (permalink)  
Antiguo 22/01/2008, 11:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Hacer Miniatura con libreria GD?

Este código esta incorrecto:
Código PHP:
$camino=dirname($imagen)."http://www.forosdelweb.com/images/"
Debe de ser:
Código PHP:
$camino=dirname($imagen); 
Prueba ya con la imagen que tienes hacer el thumb:
Código PHP:
thumbjpeg("images/1234.jpg"125); 
Saludos.
  #7 (permalink)  
Antiguo 22/01/2008, 12:43
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: Hacer Miniatura con libreria GD?

NADA
He hecho los cambios que me dices pero no funciona:

he probado con :
thumbjpeg("images/1234.jpg", 125);
y con
thumbjpeg("1234.jpg", 125);

el mensaje es:

.thumbs/tn_1234.jpg NO exist’a
No se encuentra la imagen .1234.jpg
  #8 (permalink)  
Antiguo 22/01/2008, 13:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Hacer Miniatura con libreria GD?

Prueba cambiar esta linea:
Código PHP:
$camino=dirname($imagen)."http://www.forosdelweb.com/images/"
Por esta:
Código PHP:
$camino=dirname($imagen)."/"
Saludos.
  #9 (permalink)  
Antiguo 23/01/2008, 01:50
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: Hacer Miniatura con libreria GD?

no funciona,

Este codigo no está bien del todo

no habrá otro codigo parecido para hacer esto?
En las busquedas no he visto nada

gracias
  #10 (permalink)  
Antiguo 23/01/2008, 07:24
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Hacer Miniatura con libreria GD?

Hola, tal vez esto te puede ayudar

Edición de imágenes con PHPImagen (Aporte)

Ahora, volviendo a la duda inicial, el problema puede estar aqui:

Código PHP:
$img = @imagecreatefromjpeg($camino.$nombre) or die(...); 
Que te parece si mejor en la linea donde defines la variable $camino haces esto:

Código PHP:
# En vez de
# $camino = dirname($imagen);  

$camino dirname($imagen).'/'
Un saludo,
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 18:55.