1

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

我在 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);
}

感谢您的帮助!

4

2 回答 2

4

您没有在示例中调用 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);
?>
于 2013-08-15T10:52:42.237 回答
0

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

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

但是,大部分问题都出在 iOS 设备上,尤其是从 iPhone 拍摄的照片。(我有一部 iPhone 6 Plus 64GB)

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

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

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

由于超过 90% 的问题与来自 iOS 设备的照片图像有关。有趣的是,所有的肖像都以相同的角度变成了风景。(逆时针 90 度)。

因此,我的最终解决方案是为“风景”图像添加一个复选框。

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

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

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

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

工作量不大,问题就解决了。*remark: 到目前为止,我在这样做之后没有任何关于这个问题的电话。

于 2017-05-27T13:01:06.830 回答