Foros del Web » Programando para Internet » PHP »

redimensionar imagenes php duda

Estas en el tema de redimensionar imagenes php duda en el foro de PHP en Foros del Web. encontré en este foro el siguiente script para redimensionar imagenes, el problema es debido a mi escasa sabiduria de php, no entiendo que tengo que ...
  #1 (permalink)  
Antiguo 22/09/2009, 15:08
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Exclamación redimensionar imagenes php duda

encontré en este foro el siguiente script para redimensionar imagenes, el problema es debido a mi escasa sabiduria de php, no entiendo que tengo que modificar, y donde lo tengo que colocar en mi script para subir fotos.
¿Alquien podria explicarme un poquitin porfavor?

Código PHP:
<?
    $tam
=getimagesize("imagen.png"); 
    if(
$tam[0] > 500 OR $tam[1] > 500)
        {
        
cambiartam("imagen.png""nuevaimagen.png"200200);
        }

function 
cambiartam($nombre,$archivo,$ancho,$alto)
    {
    
$tmp=split(".",$nombre)[1];

    if (
preg_match('/jpg|jpeg|JPG/',$tmp))
        {
        
$imagen=imagecreatefromjpeg($nombre);
        }
    if (
preg_match('/png|PNG/',$tmp))
        {
        
$imagen=imagecreatefrompng($nombre);
        }
    if (
preg_match('/gif|GIF/',$tmp))
        {
        
$imagen=imagecreatefromgif($nombre);
        }

    
$x=imageSX($imagen);
    
$y=imageSY($imagen);

    if (
$x $y
        {
        
$w=$ancho;
        
$h=$y*($alto/$x);
        }

    if (
$x $y
        {
        
$w=$x*($ancho/$y);
        
$h=$alto;
        }

    if (
$x == $y
        {
        
$w=$ancho;
        
$h=$alto;
        }


    
$destino=ImageCreateTrueColor($w,$h);
    
imagecopyresampled($destino,$imagen,0,0,0,0,$w,$h,$x,$y); 


    if (
preg_match("/png/",$tmp))
        {
        
imagepng($destino,$archivo); 
        } 
    if (
preg_match("/gif/",$tmp))
        {
        
imagegif($destino,$archivo);
        }
    else 
        {
        
imagejpeg($destino,$archivo); 
        }

    
imagedestroy($destino); 
    
imagedestroy($imagen); 
}

?>
y aqui mi script para subir photos

Código PHP:
if(is_uploaded_file($_FILES['fupload']['tmp_name'])){
        
        if(
array_pop(explode(".",$_FILES['fupload']['name']))=='jpg'){

            
$fupload_name genera_random(10);
            
$file_dir ="archivosusuario/fotos"// crea un directorio "imagenes" en la carpeta donde este este archivo
            
mysql_query("INSERT INTO ph(los campos) values ('los values')");
        
            if (
move_uploaded_file($_FILES['fupload']['tmp_name'], "$file_dir/$fupload_name")){ // acá es donde lo terminamos de subir
                
echo "<br><br><img src=\"$file_dir/$fupload_name\"><p>\n\n"// lo mostramos
                
echo "Titulo ".$titulo."<br>";
                echo 
"Ubicación: url/$file_dir/$fupload_name<br>";
            } else echo 
"Error al subir el archivo";
        } else echo 
"<h1>Archivo no soportado!</h1>";    
    } else echo 
"Error al intertar subir el archivo ".$_FILES['fupload']['name'];
}}
?> 
mil gracias de antemano, ya saben, ante una buena respuesta yo respondo con karma ;)
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #2 (permalink)  
Antiguo 22/09/2009, 16:56
Avatar de _-ZeuS-_  
Fecha de Ingreso: junio-2007
Ubicación: Quito, Ecuador! ;)
Mensajes: 100
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: redimensionar imagenes php duda

primero creo que debes ser un poco màs específico en lo que quieres hacer mira la primera parte que pegas podrías ponerlo en un archivo que sea redimensionar.php la segunda parte es donde estás haciendo el upload físico de la imágen para lo cual tienes que crear un formulario que te envíe la imágen de nombre fupload a ese codigo de php si lo juntas todo tendrías algo así:

Código HTML:
<form action="subirImagen.php" enctype="multipart/form-data" method="POST">
<input type="file" name="fupload">
<input type="submit" value="subir y cambiar">
</form> 
Eso por un lado ahora la segunda parte akí realizamos la subida de la imágen con el código que tienes:

Código PHP:
if(is_uploaded_file($_FILES['fupload']['tmp_name'])){
        
        if(
array_pop(explode(".",$_FILES['fupload']['name']))=='jpg'){
            
$fupload_name genera_random(10);
            
$file_dir ="archivosusuario/fotos"// crea un directorio "imagenes" en la carpeta donde este este archivo
            
mysql_query("INSERT INTO ph(los campos) values ('los values')");
            if (
move_uploaded_file($_FILES['fupload']['tmp_name'], "$file_dir/$fupload_name")){ //   acá es donde lo terminamos de subir
                
echo "<br><br><img src=\"$file_dir/$fupload_name\"><p>\n\n"// lo mostramos
                
echo "Titulo ".$titulo."<br>";
                echo 
"Ubicación: url/$file_dir/$fupload_name<br>";
            } else echo 
"Error al subir el archivo";
        } else echo 
"<h1>Archivo no soportado!</h1>";    
    } else echo 
"Error al intertar subir el archivo ".$_FILES['fupload']['name'];
}} 
y por último para hacerle de un tamaño diferente usando esa función que tienes hacemos esto:

Código PHP:
function cambiar(<parametros>){
  
$tam=getimagesize("<nombre de la imagen>"); 
    if(
$tam[0] > 500 OR $tam[1] > 500)
        {
        
cambiartam("imagen.png""nuevaimagen.png"200200);
        }
}
function 
cambiartam($nombre,$archivo,$ancho,$alto)
    {
    
$tmp=split(".",$nombre)[1];

    if (
preg_match('/jpg|jpeg|JPG/',$tmp))
        {
        
$imagen=imagecreatefromjpeg($nombre);
        }
    if (
preg_match('/png|PNG/',$tmp))
        {
        
$imagen=imagecreatefrompng($nombre);
        }
    if (
preg_match('/gif|GIF/',$tmp))
        {
        
$imagen=imagecreatefromgif($nombre);
        }

    
$x=imageSX($imagen);
    
$y=imageSY($imagen);

    if (
$x $y
        {
        
$w=$ancho;
        
$h=$y*($alto/$x);
        }

    if (
$x $y
        {
        
$w=$x*($ancho/$y);
        
$h=$alto;
        }

    if (
$x == $y
        {
        
$w=$ancho;
        
$h=$alto;
        }


    
$destino=ImageCreateTrueColor($w,$h);
    
imagecopyresampled($destino,$imagen,0,0,0,0,$w,$h,$x,$y); 


    if (
preg_match("/png/",$tmp))
        {
        
imagepng($destino,$archivo); 
        } 
    if (
preg_match("/gif/",$tmp))
        {
        
imagegif($destino,$archivo);
        }
    else 
        {
        
imagejpeg($destino,$archivo); 
        }

    
imagedestroy($destino); 
    
imagedestroy($imagen); 

y así lo puedes llamar desde donde quieras con solo incluir el archivo y hacer esto:

Código PHP:
cambiar(direccion_imagen
eso creo que es lo que quieres hacer. con todo cualquier duda lo comunicas trankilamente
  #3 (permalink)  
Antiguo 24/09/2009, 12:07
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

ok, mi duda es general :(

Quiero saber si al redimensionarlas tienen los mismos porcentajes, es decir, que no se deformen.

Y cuando me has dicho que la 2ª parte es subir la foto, que hago para que recoja las variables el 2º script ? :S

gracias y disculpa las molestias
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma

Última edición por only_skating; 24/09/2009 a las 12:21
  #4 (permalink)  
Antiguo 24/09/2009, 12:20
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: redimensionar imagenes php duda

calculo que por logica de nombre es esta

Código PHP:
{
        
cambiartam("imagen.png""nuevaimagen.png"200200);
        } 
donde el primer 200 seria el width o ancho, y el segundo numero 200 seria el height o alto.. en este caso, creo que te sale una imagen cuadrada de 200 x 200 px, y se deforma,, uff, en ese caso, creo que la funcion no esta funcionando mal, pero se deberia generar otra variable o subfuncion que te permita redimensional el ancho por ejemplo, y que pod default tambien lo haga con el alto sin perder proporcion, mmm.. podrias ver si admite redimensionar por porcentaje, pues por defecto, creo que lo hace por px.
  #5 (permalink)  
Antiguo 24/09/2009, 12:52
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

si, pero como averiguo el porcentaje que tengo que hacer?
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #6 (permalink)  
Antiguo 24/09/2009, 13:21
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: redimensionar imagenes php duda

disculpen que me meta.
con el tema porsentajes lo que podes hacer es realizar el cáculo a parte y luego cambiar
cambiartam("imagen.png", "nuevaimagen.png", 200, 200);
por
cambiartam("imagen.png", "nuevaimagen.png", $esto, $yesto);
de manera que uno incluso podría primero medir la imagen que quieren subir
ejemplo 800x600
y realizarles un cáculo del tipo 800x600 redimencionado es igual a 640x480
con suponer esto, un array $ancho[800] = 640 ;
serviría para
cambiartam("imagen.png", "nuevaimagen.png", $ancho[800], $alto[480]);

medio que te vas a tener que quemar un par de horasculo para ver que es lo importante.
en ningún momento esta claro si las imagenes que van a subir son de formatos estándares o son creadas por el usuario. 800x600 y 640x480 son formatos del tipo 3x4. si esta constante de formato esta presente, puedes declarar el array anterior con los datos ya definidos de como los va a redimencionar
$x=imageSX($imagen);
$y=imageSY($imagen);
estas líneas obtienen eso y luego te quedaría un

cambiartam("imagen.png", "nuevaimagen.png", $ancho[$x], $alto[$y]);

creo que la cosa es así...
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #7 (permalink)  
Antiguo 26/09/2009, 04:17
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

hola, tuve una idea apartir de lo que me dijiste, pero no se si acepta porcentajes el php, y lo que haria seria algo como colocar varios ifs para reducir la imagen segun su tamaño
if($tam[0] > 1000 OR $tam[1] > 1000)
{
cambiartam("imagen.png", "nuevaimagen.png", 60%, 60%);
}
if($tam[0] > 800 OR $tam[1] > 800)
{
cambiartam("imagen.png", "nuevaimagen.png", 70%, 70%);
}
if($tam[0] > 600 OR $tam[1] > 600)
{
cambiartam("imagen.png", "nuevaimagen.png", 80%, 80%);
}
if($tam[0] > 500 OR $tam[1] > 500)
{
cambiartam("imagen.png", "nuevaimagen.png", 90%, 90%);
}
[/PHP]

el problema es que nose si admitirá esto, alguien que me oriente plis ?

gracias anticipadas
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #8 (permalink)  
Antiguo 26/09/2009, 08:09
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: redimensionar imagenes php duda

como admitirlo seguramente si, pero te recomiendo que no uses indiscriminadamente los if sin ver que hago con el else begin, o else como se usa en php.
para eso, si no quieres definir un array como te proponía antes, podes usar case...
lo otro que deberías hacer es armar una función como para que la puedas definir y llamar cuando quieras, y así no tener que escribir tanto codigo tantas veces.
por lo que veo en una poción de código esta haciendo algo de eso de sacarle el porcentaje

en estas partes
$w=$x*($ancho/$y);
$h=$alto;

modificale dentro de estos if para que haga la operación matemática y a la mosha.
no?
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #9 (permalink)  
Antiguo 26/09/2009, 15:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

hola, pero no te entendí, me podrias escribir el codigo plis ?

perdona por mi ignorancia en estos temas. saludos.
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #10 (permalink)  
Antiguo 28/09/2009, 11:03
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

hola amigos, di un pequeño paso, que me gustaria que me corrigiesen, los porcentajes en php se ponen decimalmente 0.9 0.5... entonces para redimensionar al tamaño por porcentajes lo que tendria que hacer es multiplicar el ancho y alto por el porcentaje según su tamaño.

if($tam[0] > 500 OR $tam[1] > 500)
{
cambiartam("imagen.png", "nuevaimagen.png", $tam[0]*0.6, $tam[1]*0.6);
}

no sé si asi estaria bien,
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #11 (permalink)  
Antiguo 28/09/2009, 11:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: redimensionar imagenes php duda

Código PHP:
$total 1024;
$per 15// %

$final = ($total 100) * $per
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 28/09/2009, 11:13
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: redimensionar imagenes php duda

si mis matémáticas no me fallan al multiplicar un número por 0.6 lo que estas haciendo es representar el 60% de esa imagen.
yo usaría la fomrula matemática completa, porque si quicieras redimencionar para aumentar el tamaño en un 20% por ejemplo deberías multiplicar por 1.2 y así para cada caso.
lo que nunca contestaste era cual es el formato que normalmente estarías aceptando y cual es el formato que crees que van a ir tirando tus usuarios.
el if que copiaste es para mayores de 500, mi pregunta es que pasa en proporción a los 500, si alguien mete algo de 900, o de 1024 la va a dejar del 60%, pero siempre serán distintas.
no te conviene fijar un formato único y que la formula lo que haga es dejar todas iguales?
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #13 (permalink)  
Antiguo 28/09/2009, 14:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

aver, acepto sólo jpg. Pero yo lo que pretendo es que las imágenes no sean mas grandes, si son mas pequeñas no redimensionarlas, pues se pixelarian y no me interesa.

Las redimensiono para que no sean tan grandes y pierdan tamaño a la vez. como puse antes, pondria varios if para tamaños y tamaños aproximados.
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #14 (permalink)  
Antiguo 29/09/2009, 14:29
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Exclamación redimensionar en % y subir imagen :'(

hola amigos, he estado buscando y preguntando la forma de redimensionar una imagen por porcentaje y subirla y no encontré una solución que se adaptase a mis necesidades, pues aqui pregunto por si alguien tiene uno, este es mi script con el que subo fotos
Código PHP:
if(is_uploaded_file($_FILES['fupload']['tmp_name'])){
        
        if(
array_pop(explode(".",$_FILES['fupload']['name']))=='jpg'){

            
$fupload_name genera_random(10);
            
$file_dir ="/fotos"// crea un directorio "imagenes" en la carpeta donde este este archivo
            
mysql_query("INSERT INTO ph(los campos) values ('los values')");
        
            if (
move_uploaded_file($_FILES['fupload']['tmp_name'], "$file_dir/$fupload_name")){ // acá es donde lo terminamos de subir
                
echo "<br><br><img src=\"$file_dir/$fupload_name\"><p>\n\n"// lo mostramos
                
echo "Titulo ".$titulo."<br>";
                echo 
"Ubicación: url/$file_dir/$fupload_name<br>";
            } else echo 
"Error al subir el archivo";
        } else echo 
"<h1>Archivo no soportado!</h1>";    
    } else echo 
"Error al intertar subir el archivo ".$_FILES['fupload']['name'];
}}
?> 
es bastante importante lo que necesito, pues al que me ayude le gratificaré con un karma.

mil gracias y disculpen las molestias
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #15 (permalink)  
Antiguo 29/09/2009, 15:41
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
Respuesta: redimensionar en % y subir imagen :'(

Revisa en los aportes del foro hay muchos ejemplos para hacer lo que quieres, y si lo vas a hacer por porcentaje simplemente extrae el tamaño (usando getimagesize) y con eso restale el porcentaje para que sepas hacia que medidas redimensionar.

Saludos.
  #16 (permalink)  
Antiguo 30/09/2009, 13:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

http://www.forosdelweb.com/f18/aport...php-568511/#10

me podrian decir si puedo adaptar ese script con el que tengo yo para subir fotos ?
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
  #17 (permalink)  
Antiguo 01/10/2009, 15:06
 
Fecha de Ingreso: agosto-2008
Mensajes: 382
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: redimensionar imagenes php duda

hola tios, hice esto, pero la pantalla se queda en blanco, ya no da errores.

Código PHP:
<?
if(isset($_FILES['fupload']['name'])) {  

   if(
is_uploaded_file($_FILES['fupload']['tmp_name'])) {
   
   
   
//empieza la redimension, tomamos la imagen temporal subida
   
$info getimagesize($_FILES['fupload']['tmp_name']); 
   
//segun el caso sera jpg, gif, png
   
switch ($info[2]) {
  case 
1:
    
$imagen imagecreatefromgif($_FILES['fupload'] ['tmp_name']); break;
  case 
2:
    
$imagen imagecreatefromjpeg($_FILES['fupload'] ['tmp_name']); break;
  case 
3:
    
$imagen imagecreatefrompng($_FILES['fupload'] ['tmp_name']); break;
  
// etcétera // 
  
}

$original $imagen;
$original_w imagesx($original);
$original_h imagesy($original);

$max 175;  //AQUI PONES EL TAMAÑO DE LA IMAGEN A LO QUE QUIERAS

if($original_w>$original_h) {
    
$muestra_w $max;
    
$muestra_h intval(($original_h/$original_w)*$max);
    } else {
    
$muestra_w intval(($original_w/$original_h)*$max);
    
$muestra_h $max;
    }

$muestra imagecreatetruecolor($muestra_w,$muestra_h); 

imagecopyresampled($muestra,$original,0,0,0,0$muestra_w,$muestra_h,$original_w,$original_h);
imagedestroy($original); // aqui destruyo el original, pues no hace falta ya


//imagedestroy($muestra);

     // me verifica haya sido cargado el archivo 
include('XXXXXXX.php');
$id_usuario=$_SESSION[id];
$nfotos=mysql_query("SELECTXXXXXXXXX'");
$resultados=mysql_num_rows($nfotos);
if (
$resultados == 5){
    echo 
"Ya has subido todas las fotos permitidas";
}else
{
$titulo=$_POST["titulo"];
$fecha=date("Y/m/d H:i:s");
function 
genera_random($longitud){  
$exp_reg="[^A-Z0-9]";  
return 
substr(eregi_replace($exp_reg""md5(rand())) .  
eregi_replace($exp_reg""md5(rand())) .  
eregi_replace($exp_reg""md5(rand())),  
0$longitud);  
}


            
$fupload_name genera_random(10);
            
$file_dir ="XXXXXXXXX"// crea un directorio "imagenes" en la carpeta donde este este archivo
            
mysql_query("INSERT INTO PHOTOS(id_usuario,titulo,fecha,codigo) values ('$id_usuario','$titulo','$fecha','$fupload_name')");
        
            if (
move_uploaded_file($muestra"$file_dir/$fupload_name")){ // acá es donde lo terminamos de subir
                
echo "<br><br><img src=\"$file_dir/$fupload_name\"><p>\n\n"// lo mostramos
                
echo "Titulo ".$titulo."<br>";
                echo 
"Ubicación: http://XXSX/$file_dir/$fupload_name<br>";}}}}

?>
__________________
la experiencia es la mejor de las escuelas, pero la obtienes cuando ya no la necesitas.

Yo soy aquel que mucho hace trabajar a la gente del foro, pero siempre gratifico con un karma
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 15:32.