PHP - imagen redimensionada no se deja guardar

 
Vista:

imagen redimensionada no se deja guardar

Publicado por Joan (3 intervenciones) el 11/03/2010 19:01:47
Hola amigos,

Estoy trabajando con un pequeño script que redimensiona imagenes, pero la imagen redimensionada no se quiere guardar en la carpeta. Cuando ejecuto el programa sale este mensaje:

Warning: move_uploaded_file() expects parameter 1 to be string, resource given in C:\apachefriends\xampp\htdocs\php5\miGrabarFichero3.php on line 42

Parece que dice que en la linea 42 le falta un parametro pero la verdad no lo se ver.

El script es este:

<?php
//Mediante un formulario se carga una imagen con el nombre "fichero" y se asigna a $nombre
$nombre=$_FILES["fichero"] ["tmp_name"];

//Se establecen la anchura y la altura para la nueva imagen redimensionada
$anchura=215;
$hmax=215;

//Se asigna a $datos los atributos de $nombre
$datos = getimagesize($nombre);

//Se averigua el tipo de la imagen y se crea la base para la nueva imagen con el tipo averiguado
if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}

//Uff!
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);

//Se asigna a $ext el tipo correspondiente a la nueva imagen (es el mismo de la imagen original)
if($datos[2]==1){$ext=".gif";}
if($datos[2]==2){$ext=".jpg";}
if($datos[2]==3){$ext=".png";}

//Se asigna a $nuevoNombre el nombre para la nueva imagen (aqui sin la extension)
$nuevoNombre="foto_1";

//Se asigna a $destino el path con el nombre de archivo nuevo completo
$destino = "imagenes2/".$nuevoNombre.$ext;

//Mas uff!
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}

//Se asigna a $thumb un contenedor para la nueva imagen (creo)
$thumb = imagecreatetruecolor($anchura,$altura);

//Por fin se crea la nueva imagen redimensionada en $thumb
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);

//Aqui se deberia grabar la nueva imagen en mi carpeta "imagenes2" pero no quiere
move_uploaded_file($thumb, $destino)or DIE("No ha funcionado");

//Aqui se liberan recursos de memoria
imagedestroy($thumb);
?>
[/i]
Agradeceré una ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:imagen redimensionada no se deja guardar

Publicado por Diego Romero (1450 intervenciones) el 12/03/2010 00:50:21
Debes mover el archivo subido antes de redimencionarlo. La variable $thumbs no es un archivo sino un puntero a una imagen que reside en memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imagen redimensionada no se deja guardar

Publicado por Joan (3 intervenciones) el 12/03/2010 12:25:08
Hola Diego,
Gracias por contestar a mi duda.
No obstante, hay algo que no entiendo, tengo un script que toma una imagen, la redimensiona y la muestra sin necesidad de grabarla ni antes ni despues de mostrarla y como digo funciona perfectamente. Es el siguiente:

<?php
$nombre=$_FILES["fichero"] ["tmp_name"];
$anchura=215;
$hmax=215;
$datos = getimagesize($nombre);
if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif");imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>

Seguramente me falla la "filosofia" del funcionamiento de PHP ya que desde mi perspectiva me da la impresion que si este script toma una imagen, la redimensiona y la puede mostrar (la muestra perfectamente), tambien deberia poderla guardar. ¿o no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imagen redimensionada no se deja guardar

Publicado por Diego Romero (1450 intervenciones) el 12/03/2010 21:01:14
Si lo que quieres es simplemente guardar en disco la imagen que has redimensionado pues usa la función imagejpeg() o imagepng según sea el caso.

Mira la ayuda en php.net
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imagen redimensionada no se deja guardar

Publicado por Joan (3 intervenciones) el 16/03/2010 13:19:23
Hola Diego,

He seguido tu consejo de grabar la imagen antes de redimensionarla y ya me va bien.

Muchas gracias.

Joan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar