Foros del Web » Programando para Internet » PHP »

Redimencionar imagen al subir al servidor

Estas en el tema de Redimencionar imagen al subir al servidor en el foro de PHP en Foros del Web. Hola quiero redimencionar una imagen al subirla.. este codigo k les muestro aca funciona muy bien.. sube la imagen original y hasta crea "thumb".. todo ...
  #1 (permalink)  
Antiguo 18/05/2010, 12:36
 
Fecha de Ingreso: noviembre-2008
Mensajes: 110
Antigüedad: 15 años, 8 meses
Puntos: 2
Redimencionar imagen al subir al servidor

Hola quiero redimencionar una imagen al subirla.. este codigo k les muestro aca funciona muy bien.. sube la imagen original y hasta crea "thumb".. todo bien hasta ahi.. lo que quiero esque me genere el "thumb" pero k la imagen original me la suba a por lomenos 600x800 que no me la suba tal y como es.. pok no quiero imagenes de 2,3 o 4 MB en mi servidor.. aca les dejo el codigo ojala me puedan ayudar..



este es el archivo subir.php




Código PHP:
<?
require dirname(__FILE__).'/imagen_editor.php';
$thumb_width 100;
$thumb_height 100;
$process $_SESSION['thumbs'];
$thumb_ratio round($thumb_width/$thumb_height2);

$folder $_POST['folder'];
$name $_POST['name'];


for(
$x=1$x<=2$x++){
    if (
$_FILES["file$x"]["size"] > 0) {
        
$imgSource $_FILES["file$x"]["tmp_name"];
        
$dir realpath("$folder");
        
$pic urldecode(basename($_FILES["file$x"]["name"]));
        
$pic str_replace(" ""_"$pic);
        if(
move_uploaded_file$imgSource"$dir/$name")){
            list(
$width$height$type$attr) = getimagesize("$dir/$name");
            
$ratio round($width/$height2);
            
            if (
$process == "crop"){
                if(
$ratio $thumb_ratio){
                    
$new_width ceil(($width*$thumb_width)/$height);
                    
$new_height $thumb_height;
                    
$crop_x = (round($new_width/2))-(round($thumb_width/2));
                    
$crop_y 0;
                } elseif(
$ratio $thumb_ratio){
                    
$new_width $thumb_width;
                    
$new_height ceil(($height*$thumb_height)/$width);
                    
$crop_x 0;
                    
$crop_y = (round($new_height/2))-(round($thumb_height/2));
                } else {
                    
$new_width $thumb_width;
                    
$new_height $thumb_height;
                    
$crop_x 0;
                    
$crop_y 0;
                }
                
                
$imageEditor = new ImageEditor($name$dir "/");
                
$imageEditor->resize($new_width$new_height);
                
$imageEditor->crop($crop_x$crop_y$thumb_width$thumb_height);
                
$imageEditor->outputFile($name$dir "/thumbs/");
            } else { 
                if(
$ratio $thumb_ratio){
                    
$new_width $thumb_width;
                    
$new_height ceil(($thumb_width*$height)/$width);
                } elseif(
$ratio $thumb_ratio){
                    
$new_width ceil(($thumb_height*$width)/$height);
                    
$new_height $thumb_height;
                } else {
                    
$new_width $thumb_width;
                    
$new_height $thumb_height;
                }
                
                
$imageEditor = new ImageEditor($name$dir "/");
                
$imageEditor->resize($new_width$new_height);
                
$imageEditor->outputFile($name$dir "/thumbs/");
            }
        }
    }
}

?>
  #2 (permalink)  
Antiguo 18/05/2010, 13:52
Avatar de dargor  
Fecha de Ingreso: octubre-2009
Mensajes: 134
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

aquí hay un código para generar thumb o redimensionar la imagen, no cortarla y muy sencillo por cierto.
http://mundo-php.blogspot.com/2010/0...partir-de.html
  #3 (permalink)  
Antiguo 18/05/2010, 14:11
 
Fecha de Ingreso: noviembre-2008
Mensajes: 110
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

umm mira, ese codigo como que genera el thumb acada vez que miras la imagen o he entendido mal???

Lo que yo quiero es k al momento de subir la imagene.. me redimenciones la imagen a un tamaño especifico y me genere el thumb para guardarlo tambien.. osea me genere dos archivos al mismo tiempo..

para que asi cuando abran una galeria de imagenes.. no haga uso de muchos recursos del equipo y la galeria se delpliegue rapido..
  #4 (permalink)  
Antiguo 18/05/2010, 15:16
Avatar de dargor  
Fecha de Ingreso: octubre-2009
Mensajes: 134
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

Cita:
umm mira, ese codigo como que genera el thumb acada vez que miras la imagen o he entendido mal???
No, el codigo solo es para utilizarlo una vez, debes invocar el script de redimensionar una vez que la imagen ya ha sido subida al servidor y problema resuelto.
  #5 (permalink)  
Antiguo 18/05/2010, 16:01
 
Fecha de Ingreso: noviembre-2008
Mensajes: 110
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

Bueno mira.. estonces este script genera "thumb" una vez que la imagen subio...
Tabien....

Pero si vez el codigo k yo tengo tambien genera "thumb" y sube una imagen "thumb" y la imagen en grande.. osea que ambos cosigos hacen lo mismo...

El problema que yo tengo esque si la imagen mide mas de 2mb.. no sube.. pork es muy grande... esntonces yo quiero que el codigo antes de subir la imagen la redimencione para hacer dos imagens una "thumb" y otra con otro tamaño.. por ejemplo 600x800 ... asi aunk tu tengas una fotografia tomada con una camara de 10Mpixelex.. osea 10MB.. el escript conbierta esta imagen a 600x800 antes de subirla...

Eso es lo que necesito.. perdon si no me di a entender..
Pero de todas maneras se agradece....
  #6 (permalink)  
Antiguo 19/05/2010, 07:09
 
Fecha de Ingreso: mayo-2010
Mensajes: 6
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Redimencionar imagen al subir al servidor

hola, tengo el mismo problema tengo un script que me guarda la imagen si pesa menos de 2MB si pesa mas de 2MB no me guarda la imagen, pero tambien hay otro problema que recien me he dado cuenta y por ello no se que hacer y es que si la imagen pesa menos de 2MB pero sus dimensiones son mayor de 2200 de ancho me guarda la imagen pero no me crea en thumb por eso seria interesante redimensionar la imagen antes de guardarla en la carpeta del servidor.
  #7 (permalink)  
Antiguo 19/05/2010, 09:13
 
Fecha de Ingreso: octubre-2007
Mensajes: 87
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Redimencionar imagen al subir al servidor

El código PHP SOLO se ejecuta en el servidor, para poder re dimensionar una imagen antes de subirla, deberías usar algo como javascript, pero con javascript no se puede hacer (o al menos no se como, si lo averiguas, dímelo xD).
La solución que yo de daría es:

- Modificar el php.ini para poder subir archivos mayores de 2Mb
(en Internet te explican exactamente como, es muy sencillo)

- Subir la imagen completa a tu servidor.

- Comprobar el tamaño de la imagen, y si supera el tamaño que quieres, usar un script php como el que comenta Dargor o usar GD library (en caso de que tu servidor la tenga) para re dimensionar la imagen, creando así un archivo nuevo, para usar ese.

- Eliminar la imagen subida originalmente para quedarte solo con la imagen re dimensionada con el script anterior

Si, es un pelin mas largo de quizás tenias pensado, pero ami por lo menos no se me ocurre nada más. Los scrips que tienes que usar para hacer esto son sencillos, toda la información que necesites a puedes encontrar con (el todopoderoso) google

Saludos y ya dirás si te sirve ;)
  #8 (permalink)  
Antiguo 19/05/2010, 10:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 110
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

Hola xlokyx, mira..
Yo no tengo acceso al archivo php.ini pork mis paginas las tengo en un servidor de paga, ya me comunique con ellos sobre el tema y no pueden subir el nivel de 2MB pork les genera mucho consumo de recursos en su Server.. me recomendaron hacer un codigo k redimenciones antes de...

Lo otro no podemos hacer k una vez que suba elimine el archivo originela.. pork si el archivo original mide mas de 2MB no sube... entonces no hay nada k eliminar.. el codigo tiene k hacer antes de subir la redimencion..

Asi como los sitios como Hi5 o facebook k no importa el tamaño de tu fotografia ellos simpre te hacen mas pekeña la fotografia k suben en el servidor.
  #9 (permalink)  
Antiguo 19/05/2010, 10:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Redimencionar imagen al subir al servidor

Código PHP:
   1. function crear_thumbjpeg($origen,$altura)   
   
2. {  
   
3.     $img imagecreatefromjpeg($origen);  
   
4.     $datos =getimagesize($origen);  
   
5.                 // intentamos escalar la imagen original a la medida que nos interesa  
   
6.     $ratio = ($datos[1] / $altura);  
   
7.     $anchura =round($datos[0] / $ratio);  
   
8.                 // esta será la nueva imagen reescalada  
   
9.     $thumb imagecreatetruecolor($anchura,$altura);  
  
10.                 // con esta función la reescalamos  
  
11.     imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);         
  
12.     imagejpeg($thumb,'ruta/donde/crear/la/imagen.jpg',90);  
  
13. 
Este codigo esta muy bien, pero perdonarme, no se adaptarlo en mi codigo, estoy acostumbrado a ir montando lo que se.

este es mi codigo:
Código PHP:
while ($fila_noticias=$conector->siguienteRegistro($resultado_noticias)){
            
//sumamos el IVA (las quitamos porque las tenemos hechas en funciones.lib.php
            /*$euros_iva=($fila_noticias["precio_sin_iva"]*$fila_noticias["iva"])/100;
            $precio_iva=$fila_noticias["precio_sin_iva"]+$euros_iva;*/
            //calculamos el porcentaje de oferta
            
            
if ($fila_noticias["nombre_foto"]<>'')
                
$ruta_foto=$fila_noticias["nombre_foto"];//$hay_foto="si";
                    
            
else
                
$ruta_foto=$ruta_foto_no_disponible;
                
                
        
$nombre_provincia_ocasion="";
            if (
$fila_noticias["provincia_ocasion_id"]<>''){
                
$cadena_sql="SELECT * FROM provincia_ocasion WHERE id=".$fila_noticias["provincia_ocasion_id"];
                
$resultado_provincia_ocasions=$conector->ejecutarConsulta($cadena_sql);
                
$fila_noticias_provincia_ocasion=$conector->siguienteRegistro($resultado_provincia_ocasions);
                
                
$nombre_provincia_ocasion=$fila_noticias_provincia_ocasion["nombre"];
            }
        
                            
            
$array_noticias[$indice]=array("id"=>$fila_noticias["id"],
                                            
"nombre"=>$fila_noticias["nombre"], 
                                            
"precio"=>$fila_noticias["precio"],
                                            
"provincia_ocasion"=>$nombre_provincia_ocasion,
                                            
"nombre_foto"=>$ruta_foto
                                            
);
            
$indice++;
        } 
Donde poner ?
Código PHP:
   1. crear_thumbjpeg('ruta/donde/esta/la/imagen_grande.jpg'120); //reescalaremos una altura de 120px 
me da error "imagecreatefromjpeg"
  #10 (permalink)  
Antiguo 19/05/2010, 10:25
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 15 años, 11 meses
Puntos: 87
Respuesta: Redimencionar imagen al subir al servidor

Q tal kristhian23,

Una opcion es la que te dice xlokyx, si tienes un servidor de paga, puedes crear y subir tu propio archivo php.ini a la carpeta de tus archivos php, y le pones:

post_max_size = 10M

Tambien puedes buscar algo en javascript revisa este link www.postlet.com
  #11 (permalink)  
Antiguo 19/05/2010, 10:26
 
Fecha de Ingreso: octubre-2007
Mensajes: 87
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Redimencionar imagen al subir al servidor

he encontrado un tema en otro foro que te podría ser de utilidad, a este tipo le dan una posible solución. espero que te sirva:
-- >Link <--
  #12 (permalink)  
Antiguo 19/05/2010, 12:25
Avatar de dargor  
Fecha de Ingreso: octubre-2009
Mensajes: 134
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

respondiendo a jkano8, si te da ese error es porque no esta encontrando la imagen que queres redimensionar, probablemente este equivocada la ruta que le des.

con respecto a la linea:
Código PHP:
Ver original
  1. crear_thumbjpeg('ruta/donde/esta/la/imagen_grande.jpg', 120);

yo en mi caso tengo un formulario para subir las imagenes donde exactemente despues que se ha copiado la imagen al servidor entonces incluyo la sentencia, algo asi una vez ya hecho el POST:
Código PHP:
Ver original
  1. $destino='NomCarpeta/';
  2. $nombre_archivo = $_FILES["Foto1"]['name'];
  3. $tipo_archivo = $_FILES["Foto1"]['type'];
  4. $tamano_archivo = $_FILES["Foto1"]['size'];
  5.     if (move_uploaded_file($_FILES["Foto1"]['tmp_name'], $destino.'/'.$nombre_archivo)){    
  6.         crear_thumbjpeg($destino.'/'.$nombre_archivo, 120);
  7.          echo "<br>El archivo '".$nombre_archivo."' ha sido cargado correctamente.";
  8.     }else{
  9.          echo "<br>Ocurrió algún error al subir ".$nombre_archivo.". No pudo guardarse.";
  10.     }

Última edición por dargor; 19/05/2010 a las 12:28 Razón: imagen muestra, thumb
  #13 (permalink)  
Antiguo 19/05/2010, 15:57
 
Fecha de Ingreso: noviembre-2008
Mensajes: 110
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Redimencionar imagen al subir al servidor

ok mira quike88 ..

El uso de redimencionar las Imagenes se hace con varios objetivos..

1- que no te ocupe mucho espacio en tu cuenta... de Hosteo.
2- k al momento de abrirlo no cueste tanto abirla
3- que no te cueste mucho subirla.

osea.. a mi nada me cuenta mejor.. usar un ftp y subir la carpeta completa..con las medidas originales de la fotografia.

la cuestio esk yo estoy elaborando una pagina para un INSTITUTO y en el lugar el centro de computo tiene un internet muy lento.. una imagen grande se toma casi 1 minuto en subir con un internet con velocidad normal.. ahora en un lugar k el internet handa por menos de 128kps.. tarda mas de 2 minutos si es k sube.. y aveces tienen k subir 10 imagenes de un solo....

entonces me urge.. hayar eso.. ya que en el proyecto k tengo solo eso me hace falta pork el sitio ya esta en uso-..

entonces necesito k antes de subir la imagen me redimencione la imagen original..
gracias a todos por sus respuesta.. espero mas posibles soluciones... gracias..

Última edición por kristhian23; 19/05/2010 a las 16:03
  #14 (permalink)  
Antiguo 20/05/2010, 07:47
 
Fecha de Ingreso: octubre-2007
Mensajes: 87
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Redimencionar imagen al subir al servidor

pues ya te digo, no se puede hacer lo que pides con PHP, ya que trabaja desde el servidor unicamente. Y en javascript no se puede hacer tampoco ya que no hay funciones para ello.
Si ninguna de las soluciones anteriores te sirve, lo siento pero dudo que exista alguna (y si la hay, cuando la encuentres por favor posteala ^^)

Otra opcion para poder subir imatenes de mas de 2M sin modificar el php.ini es incluir un archivo .htacces en la raiz de tu sitio con las lineas:
Código PHP:
php_value upload_max_filesize 10M
php_value post_max_size 10M 
puedes poner el valor que quieras.

Etiquetas: redimencionar
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 23:44.