Foros del Web » Programando para Internet » PHP »

Subir imagen y redimensionar sin subirla antes de forma temporal?

Estas en el tema de Subir imagen y redimensionar sin subirla antes de forma temporal? en el foro de PHP en Foros del Web. Buenas Estoy usando un clase de php para hacer thumbails de imágenes y tal y por lo visto no puede redimensionar una imagen, bajarla de ...
  #1 (permalink)  
Antiguo 21/01/2009, 07:19
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 5 meses
Puntos: 14
De acuerdo Subir imagen y redimensionar sin subirla antes de forma temporal?

Buenas

Estoy usando un clase de php para hacer thumbails de imágenes y tal y por lo visto no puede redimensionar una imagen, bajarla de calidad y demás si no está guardada temporalmente en el hosting.

Es decir, que por cada imagen que suben, se guardan 2, una de manera temporal y una vez finaliza el script se elimina de la carpeta donde esté, y otra, al final redimensionada que se guarda donde debe estar.

Es decir, que gasto doble de transferencia, o más aún, puesto que guardar la imagen de menera temporal y sin redimensionar ni bajar calidad puede ocupar icluso varios megas, en cambio, una vez tratada no ocupa más de 500Kb normalmente.

Mi pregunta es si se puede tratar una imagen (calidad, tamaño...) sin necesidad de que esté guardada en el servidor.

Saludos y gracias.
  #2 (permalink)  
Antiguo 21/01/2009, 10:14
 
Fecha de Ingreso: noviembre-2006
Mensajes: 17
Antigüedad: 17 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Buenas!

Hace tiempo cree un script para mostrar imagenes redimensionadas sin tener que guardarla por segunda vez... La verdad es que es muy util y funciona genial.

Lo que hace este pequeño script es coger la imagen y redimensionarla al ancho que le pongas en la variable w y luego la ajusta proporcionalmente según la imagen original. También se puede añadir otra variable llamada h para especificar un alto (este campo es opcional, y de no ponerlo, y tampoco poner un height="" en el img se realizará la proporción con el ancho especificado en w)... Al poner los dos parametros, el resultado será una imagen proporcional con el tamaño especificado de la original, y en caso de que no coincidan las dos proporciones, se recortará el centro de dicha proporción.

Así explicado suena un poco lio, pero pruebalo :)

El miniscript funcionaría asi:

Código HTML:
<img src="img.php?imagen=rutadelaimagen&w=60&h=60" width="60" height="60" border="0" alt="" /> 

Y este es el código:

Código PHP:
// IMG redimensionador (Héctor S. > [email protected])
//////////////////////////////////////////////////////////////////////////

if(file_exists($_GET["imagen"])){
$fotoperf $_GET["imagen"];
header("Content-type: image/jpeg");
$fileextsp split("/",$fotoperf);
$count count($fileextsp) - 1;
$nomarch $fileextsp[$count];
$fileext2 pathinfo($nomarch);
$formatperf strtolower($fileext2["extension"]);
$getsizesperf getimagesize($fotoperf);
$widthf $_GET["w"];
if(
$_GET["h"] == ""){
$h2 $widthf $getsizesperf[1];
$h2 $h2 $getsizesperf[0];
$heightf $h2;
}else{
$heightf $_GET["h"];
}
if(
$formatperf == "jpg" || $formatperf == "jpeg"){ $imgperf imagecreatefromjpeg($fotoperf); }
if(
$formatperf == "gif"){ $imgperf imagecreatefromgif($fotoperf); }
if(
$formatperf == "png"){ $imgperf imagecreatefrompng($fotoperf); }
if(
$formatperf == "bmp"){ $imgperf imagecreatefrombmp($fotoperf); }


if(
$getsizesperf[1] > $getsizesperf[0]){
$newheightperf $widthf $getsizesperf[1];
$newheightperf $newheightperf $getsizesperf[0];
$newwidthperf $widthf;
if(
$newheightperf $heightf){
$newwidthperf $heightf $getsizesperf[0];
$newwidthperf $newwidthperf $getsizesperf[1];
$newheightperf $heightf;
}
}else{
$newwidthperf $heightf $getsizesperf[0];
$newwidthperf $newwidthperf $getsizesperf[1];
$newheightperf $heightf;
if(
$newwidthperf $widthf){
$newheightperf $widthf $getsizesperf[1];
$newheightperf $newheightperf $getsizesperf[0];
$newwidthperf $widthf;
}
}

$thumbperf imagecreatetruecolor($newwidthperf$newheightperf);
imagecopyresampled($thumbperf$imgperf0000$newwidthperf$newheightperf$getsizesperf[0], $getsizesperf[1]);

if(
$newwidthperf == $widthf){
$x1 0;
$x2 $widthf;
}else{
$sobraw $newwidthperf $widthf;
$mitadw floor($sobraw 2);
$x1 $mitadw;
$x2 $mitadw $widthf;
}
if(
$newheightperf == $heightf){
$y1 0;
$y2 $heightf;
}else{
$sobrah $newheightperf $heightf;
$mitadh floor($sobrah 2);
$y1 $mitadh;
$y2 $mitadh $heighf;
}

$fpperf imagecreatetruecolor ($widthf$heightf);

imagecopy($fpperf$thumbperf00$x1$y1$widthf$heightf);
imagejpeg($fpperf,"",100);
imagedestroy($fpperf);


Ya me contaras!

Última edición por linkito; 21/01/2009 a las 12:29 Razón: fallo de redaccion
  #3 (permalink)  
Antiguo 21/01/2009, 10:56
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

IMAC/:

Simplemente no se puede.
El proceso es aun mas complicado de lo que planteas.
1.- El archivo es subido temporalmente a un directorio tremporal definido por el php.ini o por defecto en el directorio temporal del sistema operativo.
2.- Ya en este momento php conoce del tamaño, nombre original y tipo.
3.- Con el move_upload... lo traslada en su version original al directorio final y es ahi donde lo procesas para hacer el thumbnail.

Lo que puedes hacer para que el sistema no te utilice demasiados recursos es hacer un UNLINK(Borrar) del original una vez que hayas procesado y obtenido el thumbnail.

Saludos
Y espero te ayude
Franco
  #4 (permalink)  
Antiguo 21/01/2009, 11:35
 
Fecha de Ingreso: noviembre-2006
Mensajes: 17
Antigüedad: 17 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

franco... creo que te equivocas, si que se puede... si te lees mi post verás como.

He subido una prueba del script en acción para que lo podáis ver:
(el foro no me deja subir el link, asi que a ver como os lo pongo)

-> www.euphoria.es/hector/img

Saludos!
  #5 (permalink)  
Antiguo 21/01/2009, 12:22
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Cita:
Iniciado por linkito Ver Mensaje
franco... creo que te equivocas, si que se puede... si te lees mi post verás como.

He subido una prueba del script en acción para que lo podáis ver:
(el foro no me deja subir el link, asi que a ver como os lo pongo)

-> www.euphoria.es/hector/img

Saludos!
No, no se puede. Porque basicamente es lo mismo. Tu a tu funcion le pasas el parametro ruta, esto quiere decir que el archivo ya existe en tu servidor o en cualquier otro. Y al final del script se ejecuta imagejpeg() lo cual guarda la imagen en el servidor. 1 + 1 = 2 archivos.

Como te dice franco IMAC/, no se puede. La imagen tiene que estar "fisicamente" en el servidor para redimensionarla. Pero no necesariamente tienes que hacer un move_uploaded_file para tratarla, puedes tratar la imagen ANTES de moverla (ya que esta esta guardada en la carpeta /tmp).
  #6 (permalink)  
Antiguo 21/01/2009, 12:26
 
Fecha de Ingreso: noviembre-2006
Mensajes: 17
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Ups perdon, me he hecho un lío con lo que quería hacer imac, sorry :P. Pensé que querría de una imagen ya alojada en el servidor hacer un thumbnail sin necesidad de crear otra imagen distinta y guardarla.

Saludos.
  #7 (permalink)  
Antiguo 21/01/2009, 13:26
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 5 meses
Puntos: 14
De acuerdo Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Gracias por las respuestas.

Efectivamente tal vez me pude haber explicado algo mejor.

Mi intención era la de permitir a los usuarios de mi página subir imágenes a la página directamente sin tener que andar buscando alojamiento para las mismas.

Por lo visto no se puede hacer sin guardar 2 veces como mínimo la imagen. Aunque, ahora que lo comentáis, tal vez estubiera guardando 3 veces la imagen... Me explico.

Decís que cuando haces el upload de la imagen desde un formulario por ejemplo, dicha imagen se guarda en un directorio temporal cuya ruta está especificada en el php.ini ¿no?

Entonces, tal como lo hacía yo,haciendo un copy del archivo que recibía por formulario a una carpeta temporal /tmp y luego obteniendo la imagen de dicha carpeta para operar con ella y volverla a guardar como definitiva borrando la temporal... serían 3 copias ¿no?
Es decir, que sabiendo donde mete el php.ini los archivos por defecto no tendría que copiar la imagen temporalmente y podría trabajar sobre la carpeta que tiene preparada el servidor para estos casos ¿no?

Por cierto el script que ha puesto linkito puede ser de utilidad tambien ;)
Ah, y el imagecreatefromjpeg a pesar de crear otra imagen temporal (supongo), ésta no genera tráfico de upload al no ser subida, sino de descarga, ¿no? Es decir, que es igual que si estuvieran viendo una imagen normal.

Gracias.
  #8 (permalink)  
Antiguo 21/01/2009, 13:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Lo que puedes hacer es usar mejor move_uploaded_file, ya que con esa quitas el archivo del directorio temporal, y ya crear el thumbnail ya cuando la imagen esta en el directorio final.

Saludos.
  #9 (permalink)  
Antiguo 21/01/2009, 19:18
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

linkito:
Personalmente creo que tu script o codigo esta genial.
Lo he probado y es excelente.
Saludos
Franco
  #10 (permalink)  
Antiguo 20/04/2009, 04:55
 
Fecha de Ingreso: noviembre-2006
Mensajes: 17
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Subir imagen y redimensionar sin subirla antes de forma temporal?

Muchas gracias :)

Ese script lo implementé en todas las páginas que he hecho, como por ejemplo spaceofsound.com, y creo que va realmente bien... Si es cierto que realentiza un poco el servidor, pero para los que tengais un buen dedicado, yo creo que ni lo notaréis.

Saludos
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:00.