ios - PHP/IOS 6 使用 exif 从 iphone 上传时防止图像旋转

标签 ios image ios6

我有一个用 PHP 编写的照片上传脚本,可以在常规 PC 图像上正常运行,但是,当上传在 iPhone 上拍摄的图像时,它会将图像旋转 90 度。显然,问题在于 iPhone 作为较新的相机对图像进行编码,其属性包括最新标准中规定的方向,我需要使用 exif 数据来纠正这一点。我在 PHP 手册中找到了两个使用函数 exif_read_data($_FILES['file']['name']); 的脚本。收集方向数据,然后进行必要的调整以正确定位它们。但是,我无法让它们工作。

首先,我收到一个错误,指出 exif_read_data 函数无效,尽管手册说它从 PHP 4.2 开始有效,而且我正在运行 5.2。

其次,我不清楚 $image 在这些脚本中的真正含义。以前,我只是使用 move_uploaded_file($_FILES["file"]["tmp_name"],$target); 来有效上传文件。

现在我应该上传 $image 而不是 $_FILES 中的文件,但我认为这可能与 $_FILES 不同[“file”][“tmp_name”] 它可能是从文件创建的字符串,但到最后,我真的不知道 $image 是什么......

这是 PHP 手册中的函数......

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 和 imagecreatefromstring 无效功能。

有人成功解决这个问题吗?

最佳答案

我认为有点晚了,但我有一个功能脚本可以处理这个问题,唯一的是我的脚本可以动态更改大小而不是保存图像。

无论如何,这是您的解决方案:

首先,像往常一样使用 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);
?>

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

问候。

关于ios - PHP/IOS 6 使用 exif 从 iphone 上传时防止图像旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168400/

相关文章:

ios - 无法访问 Collection View 单元格信息

c# - 如何在不降低质量的情况下从 C# 放大图像(任何类型)

ios - 将自定义按钮添加到 UINavigationController 子类中

iphone - NSURL设置为nil而不是路径

javascript - 尝试使用 highcharts 将数据点注入(inject) iOS webView

ios - iOS 中的 .ttf 字距调整 : how read kerning info?

ios - 记录来自 iPad 应用程序的 API 调用

jquery - MVC 3 Webgrid 列来保存图像

java 提取jpeg图像细节

objective-c - iOS6 中带有 QLPreviewController 的自定义导航项按钮