exif数据没有方向 - PHP图像上传

时间:2014-09-11 20:15:40

标签: php ios image-processing gd exif

一直试图从iPhone上检测上传图像的图像方向,然后从中调整它们的方向。

我正在尝试解决在potrait中拍摄的图像以-90度旋转上传的问题。我尝试了许多无效的switch语句,因此决定在我的JSON返回中返回exif数据。

我看到的问题是他们在exif数据中没有方向。

我这样做:

$imagefile = $fileToUpload["tmp_name"];
$destinationImage = imagecreatefromstring(file_get_contents($imagefile));
$exif = exif_read_data($imagefile);
$moveUploadedFile = imagejpeg($destinationImage, $this->uploadDir . "/" . $newFileName, 100);
imagedestroy($destinationImage);

if ($moveUploadedFile) {
  $return['ort'] = $exif;
  echo json_encode($return);
}

我在回来时(使用萤火虫)看到的是:

FileName:"phpUQZFHh"
FileDateTime:1410465904
FileSize:473421
FileType:2
MimeType:"image/jpeg"
SectionsFound:"COMMENT"

Computed: OBJECT:
Height:700
Width:933
IsColor:1

Comment: ARRAY:
0:"CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100"

我希望能够像这样使用exif数据:

    if (!empty($exif['Orientation'])){
        //get the orientation
        $ort = $exif['Orientation'];
        //determine what oreientation the image was taken at
        switch($ort){
            case 2: // horizontal flip
                break;
            case 3: // 180 rotate left
                $destinationImage = imagerotate($destinationImage, 180, -1);
                break;
        }
    }

任何帮助?

编辑:下载了已上传的图像并检查其属性后,似乎在上传过程中删除了所有exif数据。

这仍然让我感到困惑的是为什么在上传之前/期间轮换它/如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

我想在您从iOS设备上传图片时,exif_read_data函数的返回数据中会显示“Orientation”值。它不适用于桌面浏览器。我可能错了。

答案 1 :(得分:0)

我遇到了同样的问题。事实证明,有些图像在Orientation上根本没有任何exif数据 - 通常是"正确"方向没有它。我尝试用iPhone拍摄一张风景照片,然后就有了。

在您的情况下,照片可能首先没有exif数据。我也有一些这样的照片(旋转-90度,但没有Orientation信息)。我可能错了,但没有exif数据,没有编程方式来了解图像是否定向错误。

对于没有Orientation信息的错误定向的照片,我建议您确保用户看到(预览)要上传的内容。 IME,大多数用户都非常愿意为了解决油漆/ photoshop /等问题。只是为了确保他们有漂亮的照片。

答案 2 :(得分:0)

在将文件移动到服务器目录之前,您可以获得Orientation值(也适用于iPhone)

$image = $_FILES["image"]["tmp_name"];
$orientation = '';
if (function_exists('exif_read_data')) 
{
   $exif = exif_read_data(image);
   if($exif && isset($exif['Orientation']))
       $orientation = $exif['Orientation'];
}