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

Kim*_*Kim 1 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);
}
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

Vas*_*sco 5

您在示例中没有调用 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);
?>
Run Code Online (Sandbox Code Playgroud)