PHP获取图像exif并旋转/调整图像大小

时间:2013-05-29 21:08:03

标签: php image rotation

我正在构建一个应用程序,您可以拍摄照片并使用手机上传图像,但您拍摄的图像会自动旋转到横向。相信我,我已经尝试了很多,并在发布之前进行了研究!

我没有PHP的高级技能,但是我有一个代码来处理调整大小的好处,但它不会轮换。

有没有人看到它的任何直接问题?

// resizeImage
function loadResize($imageName, $imageWidth, $imageHeight, $resizeType) {
list($width, $height, $type, $attr) = getimagesize($imageName);
if($resizeType=="portrait" && $height<=$imageHeight) {
    return;
}
if($resizeType=="landscape" && $width<=$imageWidth) {
    return;
}

    $exif = exif_read_data($imageName);

if (!empty($exif['Orientation'])) {
    switch ($exif['Orientation']) {
        case 3:
            $imageName = imagerotate($imageName, 180, 0);
            break;

        case 6:
            $imageName = imagerotate($imageName, -90, 0);
            break;

        case 8:
            $imageName = imagerotate($imageName, 90, 0);
            break;
    }
}

// *** 1) Initialise / load image
$resizeObj = new resize($imageName);
// *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
$resizeObj -> resizeImage($imageWidth, $imageHeight, $resizeType);
// *** 3) Save image
$resizeObj -> saveImage($imageName, 100);
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您不要在示例中调用loadResize函数。

使用GD库的解决方案。此解决方案仅查找exif数据以查看是否应旋转图像。它没有考虑实际的宽高比。

<?php
$imageName = "image.jpg";
$exif = exif_read_data($imageName);

if (!empty($exif['Orientation'])) {
    switch ($exif['Orientation']) {
    case 3:
        $angle = 180 ;
        break;

    case 6:
        $angle = -90;
        break;

    case 8:
        $angle = 90; 
        break;
    default:
        $angle = 0;
        break;
    }   
}   
if (preg_match("/.*\.jpg/i", $imageName))
    $source = imagecreatefromjpeg($imageName);
else
    $source = imagecreatefrompng($imageName);
$source = imagerotate($source, $angle, 0);
imagejpeg($source, $imageName);
?>

答案 1 :(得分:0)

我想从网站用户的角度回答这个问题。 **因为我最近遇到了同样的问题。

首先,我没有从Android设备或PC / MAC上传图像文件(jpg)的问题。上传后图像的方向是正确的。

然而,大多数问题是iOS设备,尤其是从iPhone拍摄的照片。 (我有一个iPhone 6 Plus 64GB)

我尝试了很多方法,包括上面的建议,并使用代码信息(0)&amp;获取宽度和高度的信息(1)。

问题在于,拍摄照片后,iPhone中的图像不会自动设置方向。可以通过手机的默认照片编辑器运行每个图像文件,旋转,保存,然后再次旋转到正确的方向并再次保存,问题就解决了。

但是要求网站用户这样做是不可能的。

由于超过90%的问题与来自iOS设备的照片图像有关。 而有趣的部分是所有的人像都以同样的角度转向景观。 (逆时针90度)。

因此,我的最终解决方案是包含“横向”图像的复选框。

上传图像文件时,如果是横向格式,用户只需点击横向即可。

程序将检查宽度除以高度是否小于1。 如果是这样,它会将其旋转为横向(我的情况下使用90)。 *评论:实际上,我对“风景图像”没有任何问题。

然后,如果图像是“protrait”,则用户不选中该复选框。 现在程序将检查宽度除以高度是否大于1。 如果是这样,它会将它旋转到protrait(在我的情况下我使用-90)。 *评论:到目前为止,这已经解决了iPhone照片的所有问题。

因此,对于剩余的10%问题(如果有的话),我只是要求用户手动使用PC上的照片编辑器再次打开并保存图像文件。

这不是太多的工作,问题就解决了。 *评论:到目前为止,在此之后我再也没有关于这个问题的电话了。