He construido un sitio web que permite subir una imagen y una vez que una imagen se carga , alguna información específica acerca de la foto que se muestra.
Subir fotos de los equipos funciona bien , el problema viene cuando estoy tratando de subir una imagen desde un smartphone. La carga de éxito, pero parece que una parte importante de los datos que se muestran en el momento de subir desde el ordenador ahora es que falta.

Esta sección de código es el que realmente se recupera y la visualización de los datos :

$location = $_FILES["pic"]["tmp_name"];
$data = exif_read_data($location);
var_dump($data);

la var_dump($data) en realidad volcados de datos diferentes en las computadoras y los teléfonos inteligentes.

EDIT : al Parecer funciona muy bien con Andoroid smartphones, el problema viene cuando intento subir imágenes desde el iPhone

Por ejemplo, var_dump de equipo de carga :

array(49) { 
["FileName"]=> string(10) "php2D4.tmp" 
["FileDateTime"]=> int(1367318152) 
["FileSize"]=> int(30357) 
["FileType"]=> int(2) 
["MimeType"]=> string(10) "image/jpeg" 
["SectionsFound"]=> string(24) "ANY_TAG, IFD0, EXIF, GPS" 
["COMPUTED"]=> array(6) { 
["html"]=> string(24) "width="320" height="240""  
["Height"]=> int(240)  
["Width"]=> int(320)  
["IsColor"]=> int(1)  
["ByteOrderMotorola"]=> int(1)  
["ApertureFNumber"]=> string(5) "f/2.8"  
}  
["Make"]=> string(5) "Apple"  
["Model"]=> string(8) "iPhone 4"  
["Orientation"]=> int(3)  
["XResolution"]=> string(4) "72/1"  
["YResolution"]=> string(4) "72/1"  
["ResolutionUnit"]=> int(2)  
["Software"]=> string(5) "6.1.3"  
["DateTime"]=> string(19) "2013:04:26 23:57:43"  
["YCbCrPositioning"]=> int(1)  
["Exif_IFD_Pointer"]=> int(204)  
["GPS_IFD_Pointer"]=> int(594)  
["ExposureTime"]=> string(4) "1/15"  
["FNumber"]=> string(4) "14/5"  
["ExposureProgram"]=> int(2)  
["ISOSpeedRatings"]=> int(1000)  
["ExifVersion"]=> string(4) "0221"  
["DateTimeOriginal"]=> string(19) "2013:04:26 23:57:43"  
["DateTimeDigitized"]=> string(19) "2013:04:26 23:57:43"  
["ComponentsConfiguration"]=> string(4) ""  
["ShutterSpeedValue"]=> string(9) "4889/1250"  
["ApertureValue"]=> string(9) "4281/1441"  
["BrightnessValue"]=> string(10) "-3581/1451"  
["MeteringMode"]=> int(5)  
["Flash"]=> int(24)  
["FocalLength"]=> string(5) "77/20"  
["SubjectLocation"]=> array(4) {  
[0]=> int(1295) 
[1]=> int(967) 
[2]=> int(699) 
[3]=> int(696) 
} 
["FlashPixVersion"]=> string(4) "0100" 
["ColorSpace"]=> int(1) 
["ExifImageWidth"]=> int(2592) 
["ExifImageLength"]=> int(1936) 
["SensingMethod"]=> int(2) 
["ExposureMode"]=> int(0) 
["WhiteBalance"]=> int(0) 
["FocalLengthIn35mmFilm"]=> int(35) 
["SceneCaptureType"]=> int(0) 
["GPSLatitudeRef"]=> string(1) "N" 
["GPSLatitude"]=> array(3) { 
[0]=> string(4) "31/1" 
[1]=> string(8) "5854/100" 
[2]=> string(3) "0/1" 
} 
["GPSLongitudeRef"]=> string(1) "E" 
["GPSLongitude"]=> array(3) { 
[0]=> string(4) "34/1" 
[1]=> string(8) "4684/100" 
[2]=> string(3) "0/1" 
} 
["GPSTimeStamp"]=> array(3) { 
[0]=> string(4) "20/1" 
[1]=> string(4) "57/1" 
[2]=> string(8) "4272/100" 
} 
["GPSImgDirectionRef"]=> string(1) "T" 
["GPSImgDirection"]=> string(9) "48089/465" 
}

var_dump de smartphone de carga:

array(12) { 
["FileName"]=> string(9) "phpSzwfPw" 
["FileDateTime"]=> int(1367318054) 
["FileSize"]=> int(1778041) 
["FileType"]=> int(2) 
["MimeType"]=> string(10) "image/jpeg" 
["SectionsFound"]=> string(19) "ANY_TAG, IFD0, EXIF" 
["COMPUTED"]=> array(5) { 
["html"]=> string(26) "width="2592" height="1936"" 
["Height"]=> int(1936) 
["Width"]=> int(2592) 
["IsColor"]=> int(1) 
["ByteOrderMotorola"]=> int(1) 
} 
["Orientation"]=> int(3) 
["Exif_IFD_Pointer"]=> int(38) 
["ColorSpace"]=> int(1) 
["ExifImageWidth"]=> int(2592) 
["ExifImageLength"]=> int(1936) 
}

Aquí está el equipo var_dump($_FILES) :

    array(1) 
{ ["pic"]=> array(5) 
{ ["name"]=> string(18) leaf2.JPG" 
["type"]=> string(10) "image/jpeg" 
["tmp_name"]=> string(14) "/tmp/phpzeDUs9"
["error"]=> int(0)
["size"]=> int(46439) } }

Aquí está el iPhone resultados var_dump($_FILES) :

    array(1) { ["pic"]=> array(5) 
{ ["name"]=> string(9) "image.jpg" 
["type"]=> string(10) "image/jpeg" 
["tmp_name"]=> string(14) "/tmp/phplPUZky" 
["error"]=> int(0) ["size"]=> int(1455577) } } 

EDIT : Aquí está la carga de formulario HTML código:

     <form action="results.php" id="upload-image" method="post" enctype="multipart/form-data">
<div class="fileupload fileupload-new" data-provides="fileupload">
<div class="fileupload-preview thumbnail" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-file"><span class="fileupload-new">Select image</span><span class="fileupload-exists">Change</span><input type="file" name="pic" id="pic" accept="image/*"/></span>
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
<button type="submit" class="btn">Upload</button>
</br>
<span class="upload-error"></span>
</div>
</form>

Lo que podría causar?

  • Puedes mostrar la diferencia?
  • una edición se hizo.
  • Está Usted a subir el mismo archivo/imagen tanto desde el PC y el teléfono inteligente?
  • por supuesto
  • Puede usted var_dump($_FILES)?
  • He editado el post y var_dump de los dos casos se incluye
  • ¿Qué es exactamente la que falta?
  • Echa un vistazo a la diferencia entre los datos var_dump de equipo de carga y el iphone de carga ; Una gran cantidad de datos exif le falta, mientras que la subida desde el iPhone. Voy a mencionar que la carga de las mismas imágenes de Android funciona bien y no en los datos exif de falta
  • Usted está explícitamente hablando sobre el uso de Safari en iOS, no se trata de aplicaciones nativas, correcto?
  • He encontrado que en los datos exif es despojado (o no) en las imágenes que se toman cuando se accede a la cámara a través de Safari. Sin embargo, si yo tomo una imagen directamente a través de la cámara y, a continuación, en Safari eligió para adjuntar la imagen de mi biblioteca de fotos (en lugar de tomarlo, a continuación, en el lugar), los datos exif estaba presente.

InformationsquelleAutor | 2013-04-30

9 Comentarios

  1. 18

    El problema

    Es correcto que el iphone(ipad, etc, voy a llamar iphone a partir de ahora) tiras en los datos exif. Esto tampoco es un error en el iphone, pero en realidad una función.

    Una de las principales razones por las que los usuarios de android no como el iphone y los usuarios de iphone no como los androides, es porque el iphone es muy limitada (en términos de libertad de cambiar, modificar, etc). Usted no sólo puede ejecutar las aplicaciones descargadas, tienen acceso limitado a la configuración, etc.

    Esto es debido a que la estrategia de apple es crear un producto seguro. «Si usted no puede hacer cosas extrañas, cosas extrañas que no va a suceder».Se trata de proteger al usuario en todas las formas imaginables. También protege al usuario al subir imágenes. En el exif puede haber datos que pueden perjudicar a la privacidad de los usuarios. Cosas como las coordenadas GPS, pero incluso una marca de tiempo que puede lastimar a un usuario (imagina que la carga de una playa de imagen con una marca de tiempo a partir de un momento se informó en el enfermo con el jefe).

    Por lo que básicamente es una seguridad dimensionar a la franja de todos los datos exif. A mí y a un montón de gente no está de acuerdo con esta estrategia, pero no hay nada que podamos hacer al respecto, lamentablemente.

    La solución

    Actualización: Esto no funciona. (gracias likeitlikeit por esta información)

    Afortunadamente, usted puede conseguir alrededor de este problema. Javascript viene al rescate. Con javascript se puede leer los datos exif y enviar con foto, añadiendo algunos extras POSTERIOR de los datos.

    tenga en cuenta: esta solución se me presentó otro desarrollador y todavía no está probado.

    Fuentes

    Usted está pidiendo fuentes fidedignas. Por desgracia, son difíciles de encontrar como el de apple no está hablando como siempre y por lo tanto toda la información que tengo es de oídas.

    quizás uno de los más fuentes confiables que pueden presentar es una de las flickr staffmembers que confirma que la causa raíz es mobile safari de eliminación de los datos exif.
    http://www.flickr.com/help/forum/en-us/72157632100391901/#reply72157632135956813

  2. 6

    si el pic se enviará por correo electrónico desde el iphone y se guarda en un mac, los datos exif se conserva. Si su copia a través de la Captura de Imágenes para mac, los datos exif se conserva. Sólo si se cargan a un servicio de la cámara de papel está en los datos exif no se envía con la carga.

  3. 5

    No hay declaraciones oficiales de Apple acerca de esta característica, aunque hay un número de gente preguntando acerca de esto incluso en los foros de Apple. En realidad, de lo que se reportó alrededor de la red, esto no sólo sucede con las cargas en el Safari del iPhone, sino también para los archivos adjuntos de correo electrónico.

    Sin embargo, es claro que hay una gran cantidad de personas afectadas por este. Flickr parece ser una de las principales víctimas, pero hay otros también.

    Por suerte, hoy en día hay formas de acceder a los archivos raw de datos para <input type="file"> etiquetas. Esto le permite tomar la información EXIF desea, lo puso en un campo oculto de formulario, y enviarlo junto con la carga de archivos real. He adaptado un jsfiddle de esta respuesta para mostrar lo que quiero decir con esto:

    Eche un vistazo.

    ACTUALIZACIÓN: JavaScript es de ninguna ayuda

    Esto no parece tener el efecto deseado en la actual generación de dispositivos iOS, como la FileReader API también consigue el acceso a una versión alterada del archivo.

    • Gracias por la respuesta, pero el problema es que una vez que elija una foto de la galería parece que los datos EXIF se elimina . He intentado utilizar el jsfiddle código que he traído de mi iphone y no se muestran los correspondientes datos exif que parece ser despojado. ¿Cómo podría yo manejar este problema ? Espero de verdad que hay una solución
    • No soy dueño de un iDevice, pero su declaración se suma a la creciente cuerpo de evidencia de que esto está activamente prohibido por iOS. Siento decirlo, pero parece que esto no es posible usar el navegador por defecto en los iPhones o iPads. Realmente traté de…
    • Sólo para agregar mi 2c – he estado usando github.com/jseidelin/exif-js para obtener datos EXIF de Javascript del lado del cliente – esto funciona bien en Android y en iPhone parece que funciona, pero de ninguna imagen, sólo devuelve básicos en los datos EXIF (profundidad de color, resolución) y nada más. Estoy usando fileReader.readAsArrayBuffer.
    • Ah, y esto es cierto tanto en Safari y Chrome, así que yo supongo que Apple tiene el Chrome para hacerlo así.
  4. 0

    Por desgracia, itamar (op) si se carga desde el iphone a un servidor (como es mi caso), la IFDO: HACER es despojado. Si el pic está guardado en el iphone y el correo electrónico, los datos están allí.

    Tengo la necesidad de HACER de la información con el fin de rotar las fotos correctamente. La ORIENTACIÓN de valor es diferente para Apple y Android y si tuviera que HACER yo podía código para adaptarse. No se puede entender cuál es el secreto de las preocupaciones podría ser con el saber qué dispositivo se tomó la foto.

    Corto de Apple que permite a los usuarios seleccionar el PIC los datos a ser cargados, tal vez en la CONFIGURACIÓN,
    posibles soluciones:

    • la creación de código para CARGAR un archivo guardado (no compartir la foto) a la ubicación del servidor y, a continuación, adjuntar/agregar a último lugar en
    • de uso comercial apps para subir, como http://www.transloadit.com
    • en lugar de en función a los datos EXIF de HACER, me decidí en encontrar el dispositivo y o/s se utiliza para enviar datos. Explorará «client_agent» como punto de partida.

    Sólo tengo esta idea de que al mirar el RESULTADO JSON de subir a TRANSLOADIT. Claramente los datos que necesitamos:

    «client_agent»: «Mozilla/5.0 (iPad; CPU OS 7_1_1 como Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/34.0.1847.18 Móvil/11D201 Safari/9537.53»,

    Si se puede «ver» el o/s y el dispositivo, así que podemos.

    Si queremos obtener los datos, entonces puede ser añadido a pic EXIF y utilizados en otros lugares.

    Espero que esto ayudó.

    EDIT: datos de la PC de Windows para ilustrar al utilizar el «echo $_SERVER[‘HTTP_USER_AGENT’] . «\n\n»;»

    DE PC: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Archivo

    DESDE el IPAD: «Mozilla/5.0 (iPad; CPU OS 7_1_1 como Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/34.0.1847.18 Móvil/11D201 Safari/9537.53»,

    EDIT: añadido rference a php.net y obtener navegador:
    http://www.php.net/manual/en/function.get-browser.php

  5. 0

    Actualmente estoy usando iOS 8.1.1 y también me di cuenta de este desafortunados comportamiento de cortar ciertos datos Exif de las fotos cuando se carga a través de mobile safari. Me di cuenta de que el comportamiento de la misma con una instalación fresca de:

    • Opera mini
    • Chrome
    • Mercurio

    Así que mi suposición es que el comportamiento no es el navegador relacionados, pero su la aplicación de la cámara cuando la transferencia de la foto a otra aplicación (no autorizado por Apple).

    ¿Alguien encontró un comunicado oficial de Apple para este datos Exif de corte?

  6. 0

    También tengo un problema similar, la copia de un iPhone (no parece importar lo que iOS/iPhone combo es como se ha estado sucediendo desde hace años) a un equipo con Windows 7 (también probado en varias máquinas). Si puedo copiar un archivo jpg desde el teléfono a la PC de una gran minoría de imágenes tienen su información EXIF severamente eliminado. Que es muy molesto cuando los sellos de tiempo y de información GPS va por mal camino. Lo que es aún más extraño es que puedo recuperar la ‘Fecha’ si quiero ver el jpg en MS la Imagen de la Galería y mira la imagen de la fecha de la toma de cupones que todavía está presente de Cambio de la fecha de uno y entrar luego de vuelta hacia uno y la fecha de la toma de cupones de la volverá a aparecer en el archivo en el Explorador de Windows.
    Esto es más extraño comportamiento en la parte superior de comportamiento extraño y muy molesto para el arranque.
    Usted no tiene que hacer ninguna rotación en las imágenes o cualquier otra edición de lo contrario, hasta después de la PG revisión o usted no será capaz de recuperar la fecha de la toma de cupones.

    Para más info: no tengo iTunes instalado ya que otras causas no relacionadas con problemas.

    Así que para recapitular – iPhone conectado a un ordenador y copiar los archivos jpg más a través de Windows Explorer y algunos de los archivos aparentemente pierden su información EXIF.

  7. 0

    Estado probando en el iphone 6 para el móvil para cargar la imagen. Para atender a la orientación para el iPhone. Usted debe estar listo para los dos tipo de cargar la imagen. La cámara frontal y la cámara trasera. Para obtener la orientación de la parte delantera *selfie cámara debe hacer lo siguiente.
    Primer almacén de la imagen a la carpeta de destino en el servidor.

    $image = imagecreatefromjpeg($source_url);
    imagejpeg($image, $destination_url, $quality);

    De allí en adelante se lea de la información EXIF de la creación del archivo de destino

    $exif = exif_read_data($destination_url, 0, true);
    if(!empty($exif['IFD0']['Orientation'])) {
    //rotate accordingly
    }

    Esto le dará orientación número para girar en consecuencia.
    Como por la parte de atrás de la cámara que es capaz de leer directamente desde la URL de origen. El archivo enviado desde el formulario de carga. sin tener que almacenar 1er luego de leer la información EXIF

    $exif = exif_read_data($source_url);
    if(!empty($exif['Orientation'])) {
    //rotate accordingly
    }
  8. -2

    Creo que esto ha sido resuelto ahora con la versión más reciente (no sé exactamente cual) de iOS. No puedo estar 100% seguro de esto.

    He notado recientemente que este ha comenzado a trabajar en un par de diferentes iPhones que he probado y que han iOS 9.2 instalado.

    Por lo que si todos se puede sacar usted iPhones y empezar a probar sería genial para ver si esto ha sido resuelto.

    • Eliminar esta respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here