从iPhone使用exif上传时,从旋转的PHP / IOS6 prvent图像

我有一个用PHP编写的照片上传脚本,可以在普通的PC图像上正常工作,但是,当上传图片在iPhone上时,它会旋转90度。 显然,问题是,iPhone作为一个新的摄像头编码图像的属性,包括在最新的标准阐述的方向,我需要使用EXIF数据来纠正这一点。 我在PHP手册中find了两个使用函数exif_read_data($ _ FILES ['file'] ['name']); 收集定位数据,然后进行必要的调整,以适当定位。 但是,我无法让他们工作。

首先,我得到一个错误,说exif_read_data funcion是无效的,即使该手册说它是有效的PHP 4.2和我runnign 5.2。

其次,我不清楚这些剧本中的$形象究竟意味着什么。 以前,我只是使用了move_uploaded_file($_FILES["file"]["tmp_name"],$target); 有效地上传文件。

现在,而不是$_FILES中的文件,我应该上传$image但我认为这可能不是$_FILES["file"]["tmp_name"]相同的东西它可能是一个string创build的文件,但在一天结束的时候,我真的不知道什么是$图像…

这里是PHP手册的function….

1)

  $exif = exif_read_data($_FILES['file']['name']); $ort = $exif['IFD0']['Orientation']; switch($ort) { case 1: // nothing break; case 2: // horizontal flip $image->flipImage($public,1); break; case 3: // 180 rotate left $image->rotateImage($public,180); break; case 4: // vertical flip $image->flipImage($public,2); break; case 5: // vertical flip + 90 rotate right $image->flipImage($public, 2); $image->rotateImage($public, -90); break; case 6: // 90 rotate right $image->rotateImage($public, -90); break; case 7: // horizontal flip + 90 rotate right $image->flipImage($public,1); $image->rotateImage($public, -90); break; case 8: // 90 rotate left $image->rotateImage($public, 90); break; } 

2)

  $image = imagecreatefromstring(file_get_contents($_FILES['file']['name'])); $exif = exif_read_data($_FILES['file']['name']); if(!empty($exif['Orientation'])) { switch($exif['Orientation']) { case 8: $image = imagerotate($image,90,0); break; case 3: $image = imagerotate($image,180,0); break; case 6: $image = imagerotate($image,-90,0); break; } } 

在遇到这个问题之前,我只是用了

  move_uploaded_file($_FILES["file"]["tmp_name"],$target); to upload file. 

我已经改变了

 move_uploaded_file($image,$target);` 

当我运行这个,它是抛出exif_read_data不是一个有效的函数错误,也说file_get_contents和我magecreatefromstring是无效的函数。

有没有人成功解决了这个问题?

我觉得有点晚了,但是我有一个function脚本来处理这个问题,唯一的问题是我的脚本是为了改变大小而不是保存图像。

无论如何,这是你的解决scheme:

首先,像往常一样保存文件,使用move_uploaded_file,稍后运行下面的代码:

 <? $buffer = ImageCreateFromJPEG($target); $exif = exif_read_data($_GET['img']); if(!empty($exif['Orientation'])){ switch($exif['Orientation']){ case 8: $buffer = imagerotate($buffer,90,0); break; case 3: $buffer = imagerotate($buffer,180,0); break; case 6: $buffer = imagerotate($buffer,-90,0); break; } } imagejpeg($buffer, $target, 90); ?> 

这应该可以解决你的问题。

问候。