从iphone条EXIF数据图像上载(Image upload from iphone strips

2019-09-01 11:49发布

我已经建立了一个网站,该网站允许图片上传,一旦图像被上传,则显示照片的某些特定信息。 从电脑上传图片的作品就好了,问题就来了,当我试图从智能手机上传图片。 上传成功,但它似乎是从计算机上传现在下落不明时所显示的数据的重要组成部分。

该代码部分是实际检索和显示的数据的一个:

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

var_dump($data)实际转储电脑和智能手机不同的数据。

编辑:显然,它的工作原理只是Andoroid智能手机很好,当我尝试上传iPhone图片的问题只出现

例如, var_dump计算机上传:

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智能手机上传:

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) 
}

下面是计算机 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) } }

下面是iPhone的结果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) } } 

编辑:这是形式上传的HTML代码:

     <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>

什么可能造成的吗?

Answer 1:

问题

这是正确的,因为iPhone(iPad的等,我会叫它iPhone从现在起)条EXIF数据。 这还不算在iPhone上一个错误,但实际上是一个功能。

其中一个主要原因Android用户不喜欢iPhone和iPhone用户不喜欢的机器人,是因为iPhone是非常有限(自由方面的改变,改变,等等)。 你不能只是运行下载的应用程序,必须设置等有限的访问

这是因为苹果的战略是建立一个故障安全产品。 “如果你不能做奇怪的事情,奇怪的事情就不会发生”。它试图保护用户在各方面都可以想象。 上传图片时,它还能保护用户。 在EXIF有可能是会损害用户的隐私数据。 如GPS坐标的事情,但即使时间戳可以伤害一个用户(想象你上传与您在生病报道与老板一时时间戳的海滩图片)。

所以基本上它是一个安全meassure剥离所有EXIF数据。 我和其他很多人不同意这种战略认同,但我们没有什么可以做的不幸。

解决方案

更新: 这是行不通的 。 (感谢likeitlikeit此信息)

幸运的是,你可以解决这个问题。 使用Javascript来救援。 使用JavaScript可以读取EXIF数据,并通过添加一些额外的POST数据与您的照片发送。

请注意 :此溶液中其他开发人员提交给我,还没有进行测试。

来源

您所要求的可靠的消息来源。 不幸的是,他们都很难找到,因为苹果是不是说一如既往,因此我有所有的信息都是道听途说。

也许是更可靠的来源,我可以呈现一个是Flickr的staffmembers谁确认根本原因是剥离EXIF移动Safari之一。 http://www.flickr.com/help/forum/en-us/72157632100391901/#reply72157632135956813



Answer 2:

如果PIC是从iPhone通过电子邮件发送并保存到Mac上,EXIF数据将被保留。 如果它能够通过图像采集复制到Mac上,EXIF数据将被保留。 只有当上传到从摄像机角色的服务是与上传发送EXIF数据。



Answer 3:

有苹果有关此功能没有官方声明,虽然有很多人问到这个问题,即使在苹果论坛。 其实,从什么是围绕“网报道,这不仅发生在iPhone的Safari上载,也为通过电子邮件发送的附件。

但是,很显然,有很多受此影响的人。 Flickr的似乎是一个主要受害者,但有其他人了。

幸运的是,现在有访问原始文件数据的方式<input type="file">标记。 这可以让你把你想要的EXIF信息,把它变成一个隐藏的表单字段,并与实际文件上传送它一起。 我适应一个的jsfiddle从这个答案 ,展示了我的意思了:

看一看 。

UPDATE:JavaScript是没有帮助

这似乎不会对当前一代iOS设备的理想效果, FileReader API也只获得访问该文件的消毒版本



Answer 4:

不幸的是,伊塔马尔(OP),如果你从iPhone到一个服务器上传(这是我的情况),IFDO:MAKE被剥离。 如果PIC被保存在iPhone和电子邮件,数据是存在的。

我需要以正确旋转照片的MAKE信息。 价值取向是苹果和Android不同,如果我有MAKE我可以编写代码来适应。 无法理解的秘密担心可能有知道什么设备拍的照片是什么。

短的苹果允许用户选择PIC数据信息被上传,也许在设置,可能的解决方案:

  • 创建代码要上传保存的文件(未共享的图片)到服务器的位置,然后附接/加入到最终处
  • 使用商业应用程序上传,像http://www.transloadit.com
  • 而不是取决于MAKE的EXIF数据,我只是决定找出设备和O / S用于发送数据。 将探索“client_agent”为出发点。

刚刚得到这个想法从上传到TRANSLOADIT。看结果JSON。 它显然是有我们需要的数据:

“client_agent”: “的Mozilla / 5.0(ipad公司; CPU OS 7_1_1例如Mac OS X)为AppleWebKit / 537.51.1(KHTML,例如Gecko)CriOS / 34.0.1847.18移动/ 11D201 Safari浏览器/ 9537.53”,

如果他们能“看到” O / S和设备,我们也能做到。

如果我们得到的数据,那么它可以被添加到PIC EXIF和其他地方使用。

希望这有助于。

编辑:从Windows PC数据时使用以说明\ n \ n “个 ”;“ 回声$ _SERVER [ 'HTTP_USER_AGENT']”。

从PC:Mozilla的/ 5.0(Windows NT的6.2; WOW64)为AppleWebKit / 537.36(KHTML,例如Gecko)Chrome浏览器/ Safari浏览器35.0.1916.114 / 537.36文件

FROM IPAD: “的Mozilla / 5.0(ipad公司; CPU OS 7_1_1例如Mac OS X)为AppleWebKit / 537.51.1(KHTML,例如Gecko)CriOS / 34.0.1847.18移动/ 11D201 Safari浏览器/ 9537.53”,

编辑:添加rference到php.net并获得浏览器: http://www.php.net/manual/en/function.get-browser.php



Answer 5:

我只是尝试其他浏览器,Opera Mini的,和它的工作! 得到了我所有的EXIF数据!



Answer 6:

我目前使用的是iOS 8.1.1,我也注意到,通过移动Safari浏览器上传时,从照片中切割一定的Exif数据中的这个不可爱的行为。 我注意到一个全新安装相同的行为:

  • Opera Mini的

因此,我的假设是,行为不是浏览器相关的,但照片传输到另一个应用程序(不是苹果授权),当它的相机应用。

有没有人发现,从苹果公司的这种Exif数据中切割的官方声明?



Answer 7:

我也有一个从iPhone的类似问题的复制(似乎没有什么重要的iOS / iPhone作为组合,它已经发生了年)到Windows 7的机器(也尝试过各种机器上)。 如果我从手机到PC复制jpg文件的图片大少数有自己的EXIF信息严重缺失。 这是当时间戳和GPS信息走错很烦人。 什么是更奇怪的是,我可以恢复,如果我在MS的图片库查看JPG,看看图像的拍摄日期戳这仍然是存在的“拍摄日期” - 高达更改日期的一个,然后进入回落一个和日期采取的邮票将在Windows资源管理器中的文件中出现。 这是对怪异的行为顶端更多怪异的行为,并很烦人的启动。 你不能做对图像的任何旋转或任何其他编辑,否则,直到PG修复后,否则您将无法收回日期拍摄的印记。

欲了解更多的信息:我没有安装iTunes的,因为这会导致其他不相关的问题。

因此,要回顾一下 - iPhone连接到电脑,在通过Windows资源管理器复制JPG文件和某些文件显然将失去他们的EXIF信息。



Answer 8:

在测试对手机的图片上传iphone 6。 为了迎合定向用于iPhone。 你必须准备两种类型的图像上传。 在前置摄像头和后置摄像头。 为了从正面*自拍摄像头,你必须执行以下操作方向。 首先将图像存储到服务器上的目标文件夹。

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

从这里起,你看从创建目标文件的EXIF

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

这会给你的方向数相应地旋转。 至于后面的相机,你可以直接从源URL阅读。 该文件从上传的形式发布。 而不必存储1然后读取EXIF

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


Answer 9:

我想,这已经与新版本现在已经得到解决的iOS(我不知道到底是哪一个)。 我不能100%地肯定这一点。

我刚刚注意到,这已经开始在几个不同的iPhone我已经测试已安装的iOS 9.2的工作。

所以,如果你们能马上拿出你的iPhone,并开始测试将是巨大的,看看是否已经解决。



文章来源: Image upload from iphone strips exif data