Foros del Web » Programando para Internet » PHP »

Aceptar imagenes segun su dimension

Estas en el tema de Aceptar imagenes segun su dimension en el foro de PHP en Foros del Web. Hola a todos, quiero que al subir una imagen, me la acepte o no subirla depende de las dimensiones q tenga, no de peso, por ...
  #1 (permalink)  
Antiguo 11/05/2009, 05:05
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Aceptar imagenes segun su dimension

Hola a todos, quiero que al subir una imagen, me la acepte o no subirla depende de las dimensiones q tenga, no de peso, por ejemlo si excede de tanto de largo y de tanto de ancho que no me deje, q tipo de condicion deberia de usar?? Gracias
  #2 (permalink)  
Antiguo 11/05/2009, 06:30
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Échale un vistazo a la función getimagesize. Sube la imagen normalmente, comprueba las dimensiones y si no son las adecuadas borra el fichero y muestra un mensaje de error.
  #3 (permalink)  
Antiguo 11/05/2009, 08:35
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Aceptar imagenes segun su dimension

y porque mejor aceptas cualquier imagen y le generas un thumbnail con las dimensiones deseadas, obviamente en tu formulario debes advertir que para una mejor resolucion debe usar una imagen de tamaño especifico
__________________
Quitenme la vida pero no la bebida.
  #4 (permalink)  
Antiguo 11/05/2009, 08:52
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Cita:
Iniciado por cesarpunk Ver Mensaje
y porque mejor aceptas cualquier imagen y le generas un thumbnail con las dimensiones deseadas, obviamente en tu formulario debes advertir que para una mejor resolucion debe usar una imagen de tamaño especifico
Sería la mejor opción en casi todos los casos. Por si te interesa, Nena69, te dejo aquí una función que creé para estos casos:

Código PHP:
function crearThumb$fuente$destino$dim=120$propor=false$forzar=false ) {
        
$tipo_imagen explode"."$fuente );
        
$sizeof count$tipo_imagen ) - 1;
        
$ext strtolower$tipo_imagen[$sizeof] );
        if ( 
$ext == "gif" ) {
            
$fuenteimg = @imagecreatefromgif$fuente );
        }
        elseif ( 
$ext == "png" ) {
            
$fuenteimg = @imagecreatefrompng$fuente );
        }
        else {
            
$fuenteimg = @imagecreatefromjpeg$fuente );
        }
        list( 
$ancho$alto$tipo$atr ) = getimagesize$fuente );
        if ( 
$ancho $dim || $alto $dim || $forzar ) {
            if ( 
$propor ) {
                if ( 
$ancho $alto ) {
                    
$nAncho $dim;
                    
$nAlto $dim/( $ancho/$alto );
                } else {
                    
$nAlto $dim;
                    
$nAncho $dim/( $alto/$ancho );
                }
            } else {
                
$nAncho $dim;
                
$nAlto $dim;
            }
            
$thumb imagecreatetruecolor$nAncho$nAlto );
            
imagecopyresampled$thumb$fuenteimg0000$nAncho$nAlto$ancho$alto );
            
$calidad 100;
            if ( 
$ext == "gif" ) { 
                
imagegif$thumb$destino$calidad); 
            } 
            elseif ( 
$ext == "png" ) {
                
imagepng$thumb$destino$calidad);
            }
            else {
                
imagejpeg$thumb$destino$calidad);
            }
        }
    } 
Los parámetros son estos:
Fuente: String con la ruta de la imagen que quieres redimensionar. Sube la imagen a tu servidor y obtén su ruta.
Destino: La ruta donde quieres almacenar la imagen. En tu caso creo que te interesa que sea igual que la fuente, así que pásale el mismo valor.
Dim: Dimensión máxima en píxeles. Tal y como diseñé la función el alto máximo y el ancho máximo son iguales, si quieres permitir más ancho que alto o viceversa tendrás que hacer alguna pequeña modificación en la función.
Propor: Booleano que determina si la redimensión debe hacerse de forma proporcional o no. En tu caso le pasaría el valor true.
Forzar: Si se le pasa el valor true, redimensiona también imágenes más pequeñas para que tengan exactamente las dimensiones que desees. En tu caso no creo que sea necesario, así que dejarlo como false sería lo acertado.

Si a alguien le gusta la función pueda usarla y modificarla a su antojo, no me molesta en absoluto.
  #5 (permalink)  
Antiguo 11/05/2009, 09:10
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Que quiere decir un thumbnail???? no lo he oido nunca!
  #6 (permalink)  
Antiguo 11/05/2009, 09:11
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: Aceptar imagenes segun su dimension

"miniatura"
http://es.wikipedia.org/wiki/Thumbnail
  #7 (permalink)  
Antiguo 11/05/2009, 09:13
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Un thumbnail es una versión más pequeña de una imagen que se considera demasiado grande para la situación, es decir, una miniatura. La idea es que en vez de rechazar imágenes de más de, por ejemplo, 120 píxeles de ancho, crees una imagen de 120 píxeles de ancho a partir de la imagen que se pretendía subir. Eso lo puedes hacer con la función que te he puesto.
  #8 (permalink)  
Antiguo 11/05/2009, 09:28
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Ya el problema es q si pongo un ancho y un alto las imagenes que no son cuadradas se me ven mal, por ejemplo las alargadas.
  #9 (permalink)  
Antiguo 11/05/2009, 09:36
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Pásale true al parámetro $propor. La función, por necesidades personales, está diseñada para que por defecto las imágenes se hagan cuadradas.

Para que las imágenes mantengan por defecto las proporciones sustituye esto:
Código PHP:
function crearThumb$fuente$destino$dim=120$propor=false$forzar=false 
Por esto otro:
Código PHP:
function crearThumb$fuente$destino$dim=120$propor=true$forzar=false 
  #10 (permalink)  
Antiguo 11/05/2009, 09:43
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Aceptar imagenes segun su dimension

Ok...

Cómo ya te dijeron, puedes hacer dos cosas:

1. Redimensionar cualquier imagen que te suban, puedes valerte de esta Clase hecha por un colaborador del foro.

2. Validar las dimensiones al subirla al servidor con la función getimagesize

Ya es decisión tuya escoger la que mas te convenga

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #11 (permalink)  
Antiguo 12/05/2009, 02:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Y no se puede hacer con un if?? en plan de si height es mayor que tal y width es mayor q tal, la imagen no se sube, si no pasa de esas dimensiones pues se sube.
  #12 (permalink)  
Antiguo 12/05/2009, 02:54
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

No se puede hacer exactamente así si un usuario sube imagen desde su ordenador, porque antes de subirla a tu servidor no tienes acceso a la imagen y no puedes conocer sus dimensiones. Lo que puedes hacer, si no te gusta la idea del thumbnail, es lo que te decía al principio: subir la imagen, mirar las dimensiones y si no cumple los requisitos borrar la imagen con la función unlink().

De todas formas, yo optaría por la opción de crear la miniatura. ¿Hay algún motivo por el que no te guste esta opción?
  #13 (permalink)  
Antiguo 12/05/2009, 02:59
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Yo lo que quiero es que si no cumple unas ciertas dimensiones la imagen no se me suba, preferiria hacerlo de la forma mas sencilla posible ya que nunca he hecho este tipo de cosas!
  #14 (permalink)  
Antiguo 12/05/2009, 03:24
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Pero es que lo que pides no se puede hacer. PHP no puede saber cómo es la imagen hasta que no está subida a un servidor y tiene acceso a ella. Es como si la imagen estuviera metida en una caja y esa caja no se pudiera abrir hasta que la imagen no esté subida.

La opción más viable me parece la del thumbnail, así que trataré de decirte todo lo que debes hacer:

1) Incluye en tu código la función que te he puesto antes. Puedes hacerlo pegando el código en el fichero donde lo vayas a usar o usando un fichero aparte y la función include.
2) Sube la imagen a tu servidor con el código que usas normalmente para ello.
3) Después de subir la imagen, llama a la función de esta manera:
Código PHP:
crearThumb$imagen$imagen$pixelestrue ); 
$imagen será la ubicación de la imagen en tu servidor y $pixeles el número que indique las dimensiones máximas. El true del final es para evitar el problema que comentabas de que las imágenes se te hacían cuadradas.

Espero que así te sirva.
  #15 (permalink)  
Antiguo 12/05/2009, 03:43
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Este es el codigo que tengo para subir la imagen:

$ruta = $_FILES['imagen']['name'];
$rutatemp = $_FILES['imagen']['tmp_name'];
$ruta= str_replace(" ", "", $ruta);
$tipo= $_FILES['imagen']['type'];
$tamano = $_FILES['imagen']['size'];
if(!((strpos($tipo, "gif") || strpos($tipo, "jpeg")) && ($tamano < 100000) )) {
echo 'La extensión o el tamaño de los archivos no es correcta';
return false;
}
else
{
move_uploaded_file($rutatemp,"upload/".$ruta);
}



Y lo que tengo que hacer es incluirla en esta otra,verdad??


function crearThumb( $fuente, $destino, $dim=120, $propor=false, $forzar=false ) {
$tipo_imagen = explode( ".", $fuente );
$sizeof = count( $tipo_imagen ) - 1;
$ext = strtolower( $tipo_imagen[$sizeof] );
if ( $ext == "gif" ) {
$fuenteimg = @imagecreatefromgif( $fuente );
}
elseif ( $ext == "png" ) {
$fuenteimg = @imagecreatefrompng( $fuente );
}
else {
$fuenteimg = @imagecreatefromjpeg( $fuente );
}
list( $ancho, $alto, $tipo, $atr ) = getimagesize( $fuente );
if ( $ancho > $dim || $alto > $dim || $forzar ) {
if ( $propor ) {
if ( $ancho > $alto ) {
$nAncho = $dim;
$nAlto = $dim/( $ancho/$alto );
} else {
$nAlto = $dim;
$nAncho = $dim/( $alto/$ancho );
}
} else {
$nAncho = $dim;
$nAlto = $dim;
}
$thumb = imagecreatetruecolor( $nAncho, $nAlto );
imagecopyresampled( $thumb, $fuenteimg, 0, 0, 0, 0, $nAncho, $nAlto, $ancho, $alto );
$calidad = 100;
if ( $ext == "gif" ) {
imagegif( $thumb, $destino, $calidad);
}
elseif ( $ext == "png" ) {
imagepng( $thumb, $destino, $calidad);
}
else {
imagejpeg( $thumb, $destino, $calidad);
}
}
}
  #16 (permalink)  
Antiguo 12/05/2009, 03:54
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Lo más claro va a ser hacerlo así:
1) Copia sólo mi función y pégala en un fichero aparte. Llámalo como quieras, por ejemplo, imagenes.lib.php. Para facilitar las cosas, voy a asumir que lo has guardado en la misma carpeta que donde tienes el fichero con tu código.
2) Tu código quedaría así:
Código PHP:
include( "imagenes.lib.php" );

$ruta $_FILES['imagen']['name'];
$rutatemp $_FILES['imagen']['tmp_name'];
$rutastr_replace(" """$ruta);
$tipo$_FILES['imagen']['type'];
$tamano $_FILES['imagen']['size'];
if(!((
strpos($tipo"gif") || strpos($tipo"jpeg")) && ($tamano 100000) )) {
echo 
'La extensión o el tamaño de los archivos no es correcta'
return 
false;
}
else 
{
$destino "upload/{$ruta}";
move_uploaded_file($rutatemp,$destino);
crearThumb$destino$destino120true );

Cambios que te pueden interesar:
1) Este cambio es opcional. Para mantenerlo todo más ordenado, el fichero imagenes.lib.php lo puedes hacer dentro de una carpeta que se llame lib, por ejemplo. Entonces, esto:
Código PHP:
include( "imagenes.lib.php" ); 
Tendría que quedar así:
Código PHP:
include( "lib/imagenes.lib.php" ); 
2) En la llamada a la función:
Código PHP:
crearThumb$destino$destino120true ); 
Cambia 120 (píxeles) por lo que tú quieras permitir.

Si algo no te queda claro, pregunta, a ver si nos quitamos el problema de encima ;)
  #17 (permalink)  
Antiguo 12/05/2009, 03:58
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

El caso esq antes de mi codigo tengo ya un include con la conexion y eso, puedo poner tambien el include con el otro archivo tambien??
  #18 (permalink)  
Antiguo 12/05/2009, 04:03
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Cita:
Iniciado por Nena69 Ver Mensaje
El caso esq antes de mi codigo tengo ya un include con la conexion y eso, puedo poner tambien el include con el otro archivo tambien??
Sin problemas, puedes usar tantos includes como requieras.
  #19 (permalink)  
Antiguo 12/05/2009, 04:51
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Ok, voy a ver q me sale.

Nada, no me funciona. Una dudita, las extensiones que hay en la funcion q son png y gif son las admitidas??

Última edición por GatorV; 12/05/2009 a las 13:06
  #20 (permalink)  
Antiguo 12/05/2009, 09:58
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Tal vez no cuentes con la librería GD, necesaria para funciones con gráficos. ¿Te da algún error?

Mi función acepta png, gif y jpeg. Con otros formatos habrá problemas, porque asume que todo lo que no es gif ni png es jpeg.
  #21 (permalink)  
Antiguo 12/05/2009, 10:57
 
Fecha de Ingreso: marzo-2008
Mensajes: 72
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Aceptar imagenes segun su dimension

Lo mio seria soportar solo gif y jpeg. No me da ningun error, pero nose, hay algunas que no me tendria que insertar y me inserta, por ejemlo las alargadas, solo quiero que me acepte las cuadradas, pq sino las alargadas se me ven muy mal.

Otra cosa, en vez de poner que el alto sea mayor o menor que el ancho, no se pueden poner medidas directamente?? pq no kiero que me salgan imagenes enormes en la pantalla!!

Siento la guerra que estoy dando, si pasais ya de contestar lo entendere!
  #22 (permalink)  
Antiguo 12/05/2009, 12:52
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Aceptar imagenes segun su dimension

Cita:
Lo mio seria soportar solo gif y jpeg. No me da ningun error, pero nose, hay algunas que no me tendria que insertar y me inserta, por ejemlo las alargadas, solo quiero que me acepte las cuadradas, pq sino las alargadas se me ven muy mal.
Por los formatos no hay conflictos: simplemente nunca llamarás a la función con un png en tu caso. Si quieres que se vean cuadradas, puedes llamar a la función así, pero se va a deformar la imagen:
Código PHP:
crearThumb$destino$destino120false ); 
Como no sé para qué lo quieres exactamente no te puedo dar muchos consejos, pero en principio yo no haría este cambio: quedará mejor una imagen alargada (que si sale alargada será porque es alargada) que una imagen deforme.

Si lo que quieres es que sólo reduzca las que sean más o menos cuadradas y rechace el resto, esta función no puede hacer esa discriminación, tendrías que hacer modificaciones.

Cita:
Otra cosa, en vez de poner que el alto sea mayor o menor que el ancho, no se pueden poner medidas directamente?? pq no kiero que me salgan imagenes enormes en la pantalla!!
En la llamada a la función que te he puesto 120 representa la medida. En este caso, pueden pasar dos cosas:

1) Si la mantienes proporcional (parámetro $propor=true) la medida más grande será 120px y la otra será proporcional (igual o más pequeña, según la imagen).
2) Si no la mantienes (parámetro $propor=false) quedaría una imagen 120x120.

Cambiando el 120 por 80, por ejemplo, la imagen tendría unas medidas máximas de 80 píxeles. Eso lo puedes cambiar a tu gusto.

Y no te preocupes por "dar guerra", estamos aquí para ayudar.
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 07:19.