Foros del Web » Programando para Internet » PHP »

como uso 'exif_imagetype'

Estas en el tema de como uso 'exif_imagetype' en el foro de PHP en Foros del Web. hola de nuevo segundo mensaje del dia je... tengo esta duda....como se daran cuenta soy novato...avanzado se podria decir... mira mi script de thumbnails solo ...
  #1 (permalink)  
Antiguo 24/04/2003, 00:01
Avatar de frogx3  
Fecha de Ingreso: abril-2003
Ubicación: Merida, Yucatan
Mensajes: 79
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta como uso 'exif_imagetype'

hola de nuevo segundo mensaje del dia je...
tengo esta duda....como se daran cuenta soy novato...avanzado se podria decir...

mira mi script de thumbnails solo hace thumbnails de jpg's quisiera que haga el thumbnail segun el tipo de imagen que se suba al servidor...

segun veo la funcion exif_imagetype con ella se obtiene el tipo de la imagen..pero no me funciona esto..y esto seria como que el paso basico para hacerlo ay les dejo el codigo pa que me digan cual es mi error.
Código PHP:
$img "cd2x.bmp";

if (
exif_imagetype("$img") = IMAGE_GIF) {
  print(
"The picture is not a gif.");
}elseif (
exif_imagetype("$img") = IMAGE_JPG) {
  print(
"The picture is not a jpg.");
}elseif (
exif_imagetype("$img") = IMAGE_PNG) {
  print(
"The picture is not a png.");
}elseif (
exif_imagetype("$img") = IMAGE_BMP) {
  print(
"The picture is not a BMP.");
}else{
  print(
"?i don't know¿.");

bueno espero y me puedan ayudar.. o si saben de alguna otra manera de realizar esta tarea...por favor posteenla...please....hay nos vemos...
  #2 (permalink)  
Antiguo 24/04/2003, 00:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si lees la documentación de esa función .. veras que devuelve un código segun el tipo de imagen que sea (lo mira leyendo el archivo de imagen y no sobre la extensión que tenga .. así se asegura que sea del formato correcto y no por ejemplo .. un .jpg camuflado en un archivo con extensión .png por porner un ejemplo ..)

A su vez .. esos "código" que devuelve los puedes acceder por los nombres de constantes como:

IMAGE_GIF .. IMAGE_PNG .. etc.

Si te fijas en tu script (que como no pones dicho código hemos de imaginarlo 0_o ...) Es probable que tegas una instrucción tipo:

Código PHP:
$img=imagecreatefromjpeg($laimagen); // crear imagen desde el formato que indicas según la funcion que uses imagecreatefrom????() 

// resto código .. y al final de todo

imagejpeg($img); // para entregar la imagen en el formato que indicas segun la funcion image????() que uses 
(o bien usas cabeceras header() par indicar el tipo de imagen q vas a entregar ?¿)

El caso .. que tienes que identificar el tipo (MIME o formato) usando esa función .. Puedes usar un switch() para .. segun corresponda elegir una u otra función de imagecreatefrom????()

Algo tipo:

Código PHP:
switch (exif_imagetype($laimagen)) {
   case 
IMAGE_PNG:
        
$img=imagecreatefrompng($laimagen);
        break;
   case 
IMAGE_JPEG:
        
$img=imagecreatefromjpeg($laimagen);
        break;
   case 
etc:
        
// etc... con el resto de tipos de imagen y siempre que tegas su equivalente imagecreatefromTIPOdeImagen()
}

// resto de código ... 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 25/04/2003, 00:23
Avatar de frogx3  
Fecha de Ingreso: abril-2003
Ubicación: Merida, Yucatan
Mensajes: 79
Antigüedad: 14 años, 8 meses
Puntos: 0
Hi cluster gracias por tu repuesta...pero todavia no entiendo muy bien como aplicar el switch con los case y todo...

aqui dej el codigo a ver si me puedes decir como se deberia de aplicar...

Código PHP:

$imagen 
imagen.png;
$altura 120;
$dir_thumb "thumbs/";
$prefijo_thumb "tn_";
$camino_nombre=explode("/",$imagen);
$nombre=end($camino_nombre);


function 
thumb($imagen,$altura) {
global 
$imagen$altura$dir_thumb$prefijo_thumb$camino_nombre$nombre;

     
// Aquí la ruta especificada para buscar la imagen.
     
$camino=substr($imagen,0,strlen($imagen)-strlen($nombre));

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente.
     
if (!file_exists($camino.$dir_thumb))
          
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio $dir_thumb");

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>";
          
$img imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>");

     
// miramos el tamaño de la imagen original...
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>");

     
// intentamos escalar la imagen original a la medida que nos interesa
          
$ratio = ($datos[1] / $altura);
          
$anchura round($datos[0] / $ratio);

     
// esta será la nueva imagen reescalada
          
$thumb imagecreatetruecolor($anchura,$altura);

     
// con esta función la reescalamos
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);

     
// voilà la salvamos con el nombre y en el lugar que nos interesa.
          
imagepng($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
     }
}
thumb($imagen$altura);
echo 
"<br><img src=\"$abpath/$camino$dir_thumb$prefijo_thumb$nombre\"><br>";
echo 
"<br>$abpath/$camino$dir_thumb$prefijo_thumb$nombre<br>";


//--------------------------------------------------------------------------

exit;
// End processing portion of script 

todo funciona bien pero como puedo ...hacer que segun la imagen que meta se la funcion imagecreatefrom??? que se ejecte lo mismo seria de imagen????
que en el codigo que esta arriba es para hacer el thumbnail de archivos png...si alguien mas sabe como hacer eso agradecere su ayuda...nos vemos...y gracias de antemano...
  #4 (permalink)  
Antiguo 25/04/2003, 07:25
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Solo sustituye
Código PHP:
$img imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>"); 
con el switch que te dio cluster
Código PHP:
switch (exif_imagetype($camino.$nombre)) {
   case 
IMAGE_PNG:
        
$img imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>");
        break;
   case 
IMAGE_JPEG:
        
$img imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>");
        break;
   case 
etc:
        
// etc... con el resto de tipos de imagen y siempre que tegas su equivalente imagecreatefromTIPOdeImagen()

switch no es tan dificil de entender. Lo que se ejecuta es la sentencia del case que coincide exactamente con el parametro de switch(xxx)
Lee detenidamente el manual http://www.php.net/switch y fijate lo que devuelve http://www.php.net/exif_imagetype

un saludo...
  #5 (permalink)  
Antiguo 25/04/2003, 21:10
Avatar de frogx3  
Fecha de Ingreso: abril-2003
Ubicación: Merida, Yucatan
Mensajes: 79
Antigüedad: 14 años, 8 meses
Puntos: 0
Hola fran gracias por tu respuesta y al parecer funciona pero no del todo...lo que pasa ahora es que me saca el thumbnail pero en color negro..aunque si ase caso al switch es decir hace su funcion pero el thumbnail queda en negro que puede ser?
  #6 (permalink)  
Antiguo 26/04/2003, 05:42
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Ahora que me doy cuenta el switch esta "defectuoso". Lo que sucede es que exif_imagetype no devuelve esas constantes, sino otras tipo IMAGETYPE_GIF, IMAGETYPE_JPEG, etc.
Código PHP:
switch (exif_imagetype($camino.$nombre)) {
   case 
IMAGETYPE_PNG:
        
$img imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>");
        break;
   case 
IMAGETYPE_JPEG:
        
$img imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>");
        break;
   case 
etc:
        
// etc... con el resto de tipos de imagen y siempre que tegas su equivalente imagecreatefromTIPOdeImagen()

Recuerda tambien hacer este mismo switch para la funcion imagepng (ya que tambien puede corresponder imagejpeg).
Si no lo haces puede suceder el caso en donde se cree una miniatura tn_algo.jpg cuando en realidad el mime es png (porque siempre la estas creando conimagepng () )

PD: para probar debes borrar primero la miniatura en negro porque sino el codigo no hará nada (por el if(file_exist(...)) )
  #7 (permalink)  
Antiguo 26/04/2003, 19:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ops! ...

Jeje .. tanta teoría y al final metí la pata con el nombre de las constantes xDDD

Bueno, jeje de todas formas siempre está el manual de PHP oficial para que lo revises .. no? xD

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 27/04/2003, 04:13
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Cita:
Bueno, jeje de todas formas siempre está el manual de PHP oficial para que lo revises .. no? xD
Buff, a veces ni eso nos salva.
Te digo porque si vas a la documentacion de exif_imagetype (http://www.php.net/manual/en/functio...-imagetype.php) fijate que te indica mal el nombre de la constante para JPGs .
Dice
Cita:
2 = IMAGETYPE_JPG
donde debería ser
Cita:
2 = IMAGETYPE_JPEG
como bien se indica aquí http://www.php.net/manual/en/ref.image.php

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 15:12.