una mostrar insercion incrustar img imagenes imagen exif_read_data etiqueta codigo php image format jpeg

mostrar - Detección automática de formato de imagen en PHP



insercion de imagenes en html (7)

Estoy buscando una forma de tomar una imagen cargada por el usuario que actualmente se coloca en una ubicación temporal ex: / tmp / jkhjkh78 y crear una imagen php de ella, detectando automáticamente el formato.

¿Hay una manera más inteligente de hacer esto que un montón de try / catching con imagefromjpeg, imagefrompng, etc.?


La gente recomienda usar getimagesize() pero la documentación dice:

Precaución Esta función espera que el nombre de archivo sea un archivo de imagen válido. Si se suministra un archivo que no es de imagen, puede detectarse incorrectamente como una imagen y la función regresará con éxito, pero la matriz puede contener valores sin sentido.

No use getimagesize() para verificar que un archivo dado sea una imagen válida. Use una solución especialmente diseñada, como la extensión Fileinfo .

La función relevante en la extensión finfo_file() es finfo_file() :

string finfo_file ( resource $finfo , string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]] )

Devuelve una descripción textual del contenido del argumento file_name , o FALSE si ocurre un error.

Los valores de retorno de ejemplo dados son: text/html , image/gif , application/vnd.ms-excel

Sin embargo, los comentarios en la página de documentación oficial advierten que tampoco se debe confiar en esto para la validación.


//Image Processing $cover = $_FILES[''cover''][''name'']; $cover_tmp_name = $_FILES[''cover''][''tmp_name'']; $cover_img_path = ''/images/''; $type = exif_imagetype($cover_tmp_name); if ($type == (IMAGETYPE_PNG || IMAGETYPE_JPEG || IMAGETYPE_GIF || IMAGETYPE_BMP)) { $cover_pre_name = md5($cover); //Just to make a image name random and cool :D /** * @description : possible exif_imagetype() return values in $type * 1 - gif image * 2 - jpg image * 3 - png image * 6 - bmp image */ switch ($type) { #There are more type you can choose. Take a look in php manual -> http://www.php.net/manual/en/function.exif-imagetype.php case ''1'' : $cover_format = ''gif''; break; case ''2'' : $cover_format = ''jpg''; break; case ''3'' : $cover_format = ''png''; break; case ''6'' : $cover_format = ''bmp''; break; default : die(''There is an error processing the image -> please try again with a new image''); break; } $cover_name = $cover_pre_name . ''.'' . $cover_format; //Checks whether the uploaded file exist or not if (file_exists($cover_img_path . $cover_name)) { $extra = 1; while (file_exists($cover_img_path . $cover_name)) { $cover_name = md5($cover) . $extra . ''.'' . $cover_format; $extra++; } } //Image Processing Ends

esto hará que el nombre de la imagen se vea genial y único


Esta es una de las funciones de getimagesize . Probablemente deberían haberlo llamado "getimageinfo", pero eso es PHP para ti.


Puede llamar a un comando del sistema (si está en Linux / Unix), file si lo desea:

kender@eira:~$ file a a: JPEG image data, EXIF standard 2.2



Use exif_imagetype () si está disponible ..:

http://www.php.net/manual/en/function.exif-imagetype.php

Estoy bastante seguro de que las funciones exif están disponibles por defecto (es decir, tienes que excluirlas específicamente en lugar de incluirlas específicamente) cuando instalas php


Esto lo ayudará a conocer la extensión y el resultado según la condición

$ image_file = '' http://foo.com/images.gif '';
$ extension = substr ($ image_file, -4);
if ($ extension == ".jpg") {echo ''Es una imagen JPG.''; } else {echo ''No es una imagen JPG.''; }