Foros
Ecalar imagen
Autor Fecha: 14 de Mayo del 2007 a las 05:35:27   Descripción: solo si es de mas de X anchura
Sin avatar
Sexo: Masculino
País:
Mensajes: 126
hola,
tengo una duda, estoy montando una web en la que se van a subir imagenes de muchos tamaños, cuando la imagen llega a cierta anchura me rompe la web, me gustaria saber como puedo hacer para que cuando sobrepase X anchura, sea escalada (no redimensionada) a un ancho concreto.

Lo he medio solucionado agregando style="width:XXXpx" pero asi me escala todas las imagenes sean del ancho q sean...
Muchas gracias. Feliz
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 10:17:55   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Bueno, lo mejor sería hacerlo en php, y para ello existe la función getimagesize(); obviamente obtiene el tamaño de la imagen, y hasta el tipo.

Te daré un ejemplo:

Código PHP
<?php

//Ancho limite para la imagen
$limite = 900;

$imagen = 'http://www.fondos10.net/data/media/5/big/angel_sexy-1024x768.jpg';

$datos = getimagesize($imagen);

if (
$datos[0] > $limite) {

    
$datos[1] = $datos[1] * ($limite / $datos[0]);
    
$datos[0] = $limite;

}

echo
'<img src="'.$imagen.'" width="'.$datos[0].'" height="'.$datos[1].'" alt="Ejemplo" />';

?>

Por cierto, este código php, asi como muchos otros, lo hice yo; fue el resultado de varias pruebas y cálculos matemáticos. Y lo digo porque esta muy bien hecho.

Y otra cosa, recuerda que te estoy diciendo como redimensionar una imagen con atributos html, pero obteniendo los datos requeridos en php. Lo digo, porque si vas a hacer vistas en miniatura, eso no es muy recomendable.

Sea lo que sea, el código te va a ser de gran ayuda, ya que si quieres crear vistas en miniatura en php, tendrias que saber como obtener los datos finales.

Sabes, no me gusta dar este tipo de respuestas, ya que no me gusta dar códigos que uso ó usaré en mi web, pero bueno; espero hagas buen uso de él.

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 15:38:37   Descripción: Ninguna
Sin avatar
Sexo: Masculino
País:
Mensajes: 126
Muchas gracias por responder, no te preocupes, hare buen uso del codigo Guiño

La web en la que lo voy a usar es www.picplaza.com (esta redireccionado, tengo un problemilla con los dominios), es un servicio de hospedaje de imagenes, el inconveniente que le veo a tu codigo es que la variable $image hace referencia a una ruta especifica de una imagen, ¿como puedo indicarle que escale para todas las imagenes que se suban? las imagenes se guardan en el directorio /files/
Muchas gracias de nuevo
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 16:26:00   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
En realidad $imagen contiene la ruta de accceso a la imagen, y esta puede ser absoluta o relativa. Al mismo tiempo puede ser otra variable.

No veo tu problema, solo es quitar la variable $imagen y reemplazar cualquier ocurrencia por la variable que almacena la url de la imagen en tu script.

Ejemplo?

Código PHP
<?php

//Ancho limite para la imagen
$limite = 900;

$datos = getimagesize($row['imagen']);

if (
$datos[0] > $limite) {

    
$datos[1] = $datos[1] * ($limite / $datos[0]);
    
$datos[0] = $limite;

}

echo
'<img src="'.$row['imagen'].'" width="'.$datos[0].'" height="'.$datos[1].'" alt="Ejemplo" />';

?>

Ahora, otra cosa completamente diferente sería, escalar solo las imagenes subidas por el usuario, y las tuyas no, dependiendo esto tambien, de la ruta donde estan ubicadas. Es decir, suponiendo que tus imagenes esten en un directorio, y las imagenes de los usuarios en otro.

Tan simple como hacer algo asi:

Código PHP
<?php

if (ereg('/files/', $imagen)) {
//Código de redimensión
}

?>

Si el directorio es el mismo siempre, entonces lo que tu pides estaría de más; o si no prentendías hacer nada de lo que comente, te recomendaría que me explicaras mejor, y que si tienes problemas adaptando el código a tu script, fueras más específico e incluso proporcionaras el código, o parte de él.

Saludos Muy bien
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 17:15:04   Descripción: Ninguna
Sin avatar
Sexo: Masculino
País:
Mensajes: 126
a ver si ahora me explico mejor, cuando alguien sube una imagen demasiado grande, se rompe la pagina y no queda bien, lo he "solucionado" añadiendo en el viewer.php en la linea en la que muestra la imagen style="width:300px

Código
<a href="<?php echo $path.$HTTP_GET_VARS['file']; ?>"><img src="<?php echo $path.$HTTP_GET_VARS['file']; ?>" alt="<?php echo $HTTP_GET_VARS['file']; ?>" title="<?php echo $HTTP_GET_VARS['file']; ?>" style="width:300px" /></a>

Para imagenes grandes queda solucionado el problema con esto, ejemplo :
Código
http://www.cochesfera.com/viewer.php?file=o1mmi1qjgmqtwmgedzwg.jpg

Sin embargo cuando se sube una imagen de poca resolucion, tambien la escala poniendola a 300px, ejemplo:
Código
http://www.cochesfera.com/viewer.php?file=tj1im5o2zmyvjmmxy2nn.gif


Lo que yo queria esque cuando se suba una imagen, se detecte que ancho tiene, si tiene mas de X ancho (500px por ejemplo) la deberá escalar para que no se rompa el diseño de la pagina, pero si es menor de X pixels (500px) no la escale. No quiero redimensionar, tan solo que se escale.Sonriente
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 19:01:33   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Eso es precisamente lo que hace el código que te di... si se supera el ancho límite o máximo, la imagen se comienza a redimensionar, escalar o como gustes llamarlo. Pero es más complejo que lo que tu querias hacer.

Ejemplo, con lo que tu estas haciendo, las imagenes grandes se hubieran hecho anchas, pero hubieran mantenido su altura original; e igualmente tanto las imagenes grandes como pequeñas hubieran tenido el mismo ancho.

Mi código supera todas esas limitaciones...

Mira, el código modificado quedaria asi:

Código PHP
<?php

//Ancho limite para la imagen
$limite = 900;

$datos = getimagesize($HTTP_GET_VARS['file']);

if (
$datos[0] > $limite) {

    
$datos[1] = $datos[1] * ($limite / $datos[0]);
    
$datos[0] = $limite;

}

?>

<a href="<?php echo $path.$HTTP_GET_VARS['file']; ?>"><img src="<?php echo $path.$HTTP_GET_VARS['file']; ?>" alt="<?php echo $HTTP_GET_VARS['file']; ?>" title="<?php echo $HTTP_GET_VARS['file']; ?>" width="<?php echo $datos[0]; ?>" height="<?php echo $datos[1]; ?>" /></a>

Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 20:12:44   Descripción: Ninguna
Sin avatar
Sexo: Masculino
País:
Mensajes: 126
muchas gracias por el codigo, lo he puesto como me has indicado (he definido la variable solo para el ancho) pero parece que redimensiona para todas las imagenes, sin importar la resolucion, lo puedes ver en los dos ejemplos de antes:
Código
http://www.cochesfera.com/viewer.php?file=tj1im5o2zmyvjmmxy2nn.gif
http://www.cochesfera.com/viewer.php?file=mmolc0je2zjowvtjingo.jpg

Este es el codigo que he puesto:
Código
<?php

//Ancho limite para la imagen
$limite = 500;
$ancho = 500;
$datos = getimagesize($HTTP_GET_VARS['file']);

if ($datos[0] > $limite) {

    $datos[1] = $datos[1] * ($limite / $datos[0]);
    $datos[0] = $limite;

}

?>

<a href="<?php echo $path.$HTTP_GET_VARS['file']; ?>"><img src="<?php echo $path.$HTTP_GET_VARS['file']; ?>" alt="<?php echo $HTTP_GET_VARS['file']; ?>" title="<?php echo $HTTP_GET_VARS['file']; ?>" width="<?php echo $ancho; ?>" /></a>

Que esta fallando? no lo entiendo...
Individual Perfil Privado Website
Autor Fecha: 15 de Mayo del 2007 a las 22:21:59   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
Tuve un pequeño error, la variable $ancho era $datos[0] y $alto era $datos[1]; otra cosa, no es por nada, pero no estas usando el código como te lo dí, al parecer tuviste problema con las medidas, pero en lugar de mejorarlo, empeoraste todo.

Introduciste la variable ancho, cuando ya estaba limite; quitaste el ancho y alto que tomaba desde la funcion getimagesize, y pusiste el ancho desde la variable ancho con un valor previamente definido... no, no, no. Estás haciendo lo mismo que antes, sino es que peor.

Prueba con este código:

Código PHP
<?php

//Ancho limite para la imagen
$limite = 500;

$datos = getimagesize($HTTP_GET_VARS['file']);

if (
$datos[0] > $limite) {

    
$datos[1] = $datos[1] * ($limite / $datos[0]);
    
$datos[0] = $limite;

}

?>

<a href="<?php echo $path.$HTTP_GET_VARS['file']; ?>"><img src="<?php echo $path.$HTTP_GET_VARS['file']; ?>" alt="<?php echo $HTTP_GET_VARS['file']; ?>" title="<?php echo $HTTP_GET_VARS['file']; ?>" width="<?php echo $datos[0]; ?>" height="<?php echo $datos[1]; ?>" /></a>

Individual Perfil Privado Website
Autor Fecha: 16 de Mayo del 2007 a las 06:30:19   Descripción: Ninguna
Sin avatar
Sexo: Masculino
País:
Mensajes: 126
No entiendo de php, probe el que me distes y como vi que no funcionaba empece a hacer pruebas, de ahi que cambiase tu codigo... Acabo de poner el ultimo que me has dado y parece que no funciona, es como si lo ignorase,
Saludos.
Individual Perfil Privado Website
Autor Fecha: 16 de Mayo del 2007 a las 18:46:13   Descripción: Ninguna
Sin avatar
Sexo: Masculino
Edad: 21 años
Ubicación: Poza Rica, Veracruz
País:
Mensajes: 1278
No puede ser... mmm... demonios!!!! jajjaja. (conste que esto no me causa gracia, me gusta que las cosas salgan porque asi lo quiero, porque yo lo digo)

Te daré un ejemplo del código funcionando, es exactamente el mismo, pero con el siguiente código antes que todo.

Código PHP
<?php

//EXTRA
if ($_GET['id'] == 1) {
    
$HTTP_GET_VARS['file'] = 'http://users.belgacom.net/bram.hmk/matrixB1024X768.jpg';
} elseif (
$_GET['id'] == 2) {
    
$HTTP_GET_VARS['file'] = 'http://www.skinbase.org/files/archive/shots/155/My_Matrix(rainy).jpg';
}
//EXTRA

?>

La primera imagen mide 1024x768 y se redimensiona a 500 x375 pixeles. La url es:

http://www.zona-ocio.org/resize.php?id=1

La segunda imagen mide 300x295, y debido a que no sobrepasa el limite especificado, no es redimensionada. La url es:

http://www.zona-ocio.org/resize.php?id=2

Si le das click a la imagen, la verás en su tamaño original.

Como puedes ver, el código que te estoy dando esta funcionando, si a ti no te funciona es porque lo estas adaptando mal; dicho de otra forma, hay un error en tu código.

Cuando este tipo de cosas pasan, no me queda de otra que pedir el script... pasame el archivo que quieres modificar, no se si será por msn, correo, o lo subirás a algun lugar... yo lo revisaré, lo modificaré y si quieres estar conectado al msn mientras lo hago adelante.

Saludos Muy bien
Individual Perfil Privado Website