Foros del Web » Programando para Internet » PHP »

redimensionar imagenes

Estas en el tema de redimensionar imagenes en el foro de PHP en Foros del Web. Hola tengo este codigo para redimensionar imagenes.. me interesa aparte de redimensionar esta, hacer otra mas peqeña y cuadara tipo 50x50 o 70x70 pero quisiera ...
  #1 (permalink)  
Antiguo 15/05/2008, 06:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
redimensionar imagenes

Hola tengo este codigo para redimensionar imagenes.. me interesa aparte de redimensionar esta, hacer otra mas peqeña y cuadara tipo 50x50 o 70x70 pero quisiera me la imagen no quedase chafada ni estirada que es lo que sucede cuando se ponen cuadradas... se puede hacer esto de alguna manera??? gracias ... un saludo

Cita:

// Funcion para crear string aleatorio
function genera_aleatorio($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);
}
$nombre_imagen = genera_aleatorio(10); // Longitud de la cadena

//Obtener datos de la imagen
$info = getimagesize($_FILES['archivo']['tmp_name']);
//segun el caso sera jpg, gif, png
switch ($info[2]) {
case 1:
$imagen = imagecreatefromgif($_FILES['archivo']['tmp_name']); break;
case 2:
$imagen = imagecreatefromjpeg($_FILES['archivo']['tmp_name']); break;
case 3:
$imagen = imagecreatefrompng($_FILES['archivo']['tmp_name']); break;
// etcétera //
}

$original = $imagen;
// devuelve anchura de la imagen y altura
$original_w = imagesx($original);
$original_h = imagesy($original);

$max = 450; //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;
}

// Crea una imagen en color real
$muestra = imagecreatetruecolor($muestra_w,$muestra_h);

//Copia y reescala parte de una imagen con remuestreo
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

$foto = "$nombre_imagen.jpeg";

if(!imagejpeg($muestra, "fotos/$foto", "50"))
{
echo "Error al subir la imagen.";
exit;
}
  #2 (permalink)  
Antiguo 15/05/2008, 08:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: redimensionar imagenes

si... necesitas un calculo extra

lo ideal, seria redimensionar normalmente como lo haces...
luego usar el concepto-crop para cortar solo la parte centrar, copiar vaya...

osea... todo keda rectangular, luego copias la parte cuadrada centrandola en tu imagen... hacia otra imagen, ke seria la final... no?

$ancho=30;
$alto=30;
$x=0;
$y=0;

$img_w=175;
$img_h=221;

$x = ($img_w - $ancho) / 2;
$y = ($img_h - $alto) / 2;
  #3 (permalink)  
Antiguo 15/05/2008, 09:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: redimensionar imagenes

Cita:
Iniciado por pateketrueke Ver Mensaje
si... necesitas un calculo extra

lo ideal, seria redimensionar normalmente como lo haces...
luego usar el concepto-crop para cortar solo la parte centrar, copiar vaya...

osea... todo keda rectangular, luego copias la parte cuadrada centrandola en tu imagen... hacia otra imagen, ke seria la final... no?

$ancho=30;
$alto=30;
$x=0;
$y=0;

$img_w=175;
$img_h=221;

$x = ($img_w - $ancho) / 2;
$y = ($img_h - $alto) / 2;
Pero hay que repetir todo el proceso?
como si creara otra imagen? o como
  #4 (permalink)  
Antiguo 15/05/2008, 09:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: redimensionar imagenes

NO hay ke repetir nada.. solo es un calculo (como 6 lineas) y de ser asi... solo usaras un funcion...

creo ke es imagecopy() o algo parecido....
  #5 (permalink)  
Antiguo 16/05/2008, 05:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Re: redimensionar imagenes

Alguien m podria ayudar con esto?? no se la funcion que hay ke usar
  #6 (permalink)  
Antiguo 16/05/2008, 08:57
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: redimensionar imagenes

Lee el manual de PHP, ya te indico pateketrueke que debes de usar imagecopy.

Saludos.
  #7 (permalink)  
Antiguo 16/05/2008, 09:24
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: redimensionar imagenes

Cita:
Iniciado por GatorV Ver Mensaje
Lee el manual de PHP, ya te indico pateketrueke que debes de usar imagecopy.

Saludos.
he leido manuales pero ske no lo entiendo... no m entra n la cabza casi nada de la libreria GD, todo lo k ago m da error.. :( si alguien no le cuesta poner cmo lo dberia de hacer.. que lo pnga porfavor, asias de toas formas. un saludo
  #8 (permalink)  
Antiguo 16/05/2008, 09:54
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: redimensionar imagenes

Lee el manual: imagecopy.

Claramente te dice que parámetros debes de poner en tu función imagecopy para copiar y hacer el "croping" que te dice pateketrueke.

Inclusive en los comentarios de la función hay varias funciones ya escritas.

Saludos.
  #9 (permalink)  
Antiguo 16/05/2008, 11:10
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: redimensionar imagenes

he construido este codigo que mas o menos hacer lo que yo kiero..
cuadra la imagen sin estirarla pero enpienza en la eskina superior izkierda... yo kiero k mas o menos m coja el centro de la foto... como puedo calcular esas coordenadas??
aki dejo el codigo: ($muestra es la imagen)
Código PHP:
$ancho imagesx($muestra);
$alto imagesy($muestra);

$img_w=150;
$img_h=150;

$x $ancho 2;
$y $alto 2;

$img2 imagecreatetruecolor($img_w$img_h);

imagecopyresized($img2,$muestra,0,0,0,0,$x,$y,$ancho,$alto);
imagejpeg($img2,"fotos/imagen.jpeg","100"
  #10 (permalink)  
Antiguo 16/05/2008, 11:43
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: redimensionar imagenes

El centro seria tomando el plano, $ancho / 2, $alto / 2, luego le restas la mitad del cuadro proporcional, por decir si tu cuadro es de 10 x 10, y tu imagen original es de 100 x 100, tu algoritmo seria:
Código:
$x = ( 100 / 2 ) - ( 10 / 2 );
$y = ( 100 / 2 ) - ( 10 / 2 );
Saludos.
  #11 (permalink)  
Antiguo 16/05/2008, 12:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: redimensionar imagenes

ntonces como seria :S???yo no se si sta asi bien... algunas imagenes me las crea bien y otras x la mitad... perdona la pesadez pero ske no m entra en la cabeza esto de las imagenes...
m gustaria que la imagen fuera de 150x150px, las coordenads no stan bien puestas no??
Cita:
$img_w=150;
$img_h=150;

$x = $ancho / 2;
$y = $alto / 2;

$img2 = imagecreatetruecolor($img_w, $img_h);

$x2 = ( 100 / 2 ) - ( 10 / 2 );
$y2 = ( 100 / 2 ) - ( 10 / 2 );

imagecopyresized($img2,$muestra,0,0,$x2,$y2,$x,$y, $ancho,$alto);
imagejpeg($img2,"nombre_imagen.jpeg","100")
  #12 (permalink)  
Antiguo 16/05/2008, 12:27
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: redimensionar imagenes

El algoritmo que te puse es genérico, no es para que lo copies tal cual, como te digo, piensa, si tienes dos cuadros, para cortar por el centro tienes que dividir, el ancho actual entre 2, menos el ancho del cuadro nuevo entre 2.

Adáptalo a tus necesidades.

Saludos.
  #13 (permalink)  
Antiguo 16/05/2008, 12:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: redimensionar imagenes

Cita:
Iniciado por GatorV Ver Mensaje
El algoritmo que te puse es genérico, no es para que lo copies tal cual, como te digo, piensa, si tienes dos cuadros, para cortar por el centro tienes que dividir, el ancho actual entre 2, menos el ancho del cuadro nuevo entre 2.

Adáptalo a tus necesidades.

Saludos.
bff me desespero cn sto delas imagenes.. no m sale... siento dar tanto el follon
pero..

Código PHP:
   //Obtener datos de la imagen
   
$info getimagesize($_FILES['archivo']['tmp_name']); 
   
//segun el caso sera jpg, gif, png
   
switch ($info[2]) {
  case 
1:
    
$imagen imagecreatefromgif($_FILES['archivo']['tmp_name']); break;
  case 
2:
    
$imagen imagecreatefromjpeg($_FILES['archivo']['tmp_name']); break;
  case 
3:
    
$imagen imagecreatefrompng($_FILES['archivo']['tmp_name']); break;
  
// etcétera // 
  
}

$original $imagen;
// devuelve anchura de la imagen y altura
$original_w imagesx($original);
$original_h imagesy($original);

$max 450;  //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;
    }

// Crea una imagen en color real
$muestra imagecreatetruecolor($muestra_w,$muestra_h); 

//Copia y reescala parte de una imagen con remuestreo
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


// Crear imagen pequeña
$img_w=150;
$img_h=150;

$x $ancho 2;
$y $alto 2;

$img2 imagecreatetruecolor($img_w$img_h);

$x = ( $ancho ) - ( 150 );
$y = ( $alto ) - ( 150 );

imagecopyresized($img2,$muestra,0,0,0,0,$x,$y,$ancho,$alto);
imagejpeg($img2,"fotos/$nombre_imagen.jpeg","100"
asi sige sin irme correctamente... dejo el codigo entero x si tengo algo mal... muxas asias
  #14 (permalink)  
Antiguo 16/05/2008, 14:33
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: redimensionar imagenes

En tu código usas la variable $ancho y $alto, pero no existe en ninguna parte de tu código la parte donde asignas esas variables.

Por otro lado tampoco defines bien los parámetros de la función imagecopyresized.

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




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