Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP获取图像exif并旋转/调整图像大小_Php_Image_Rotation - Fatal编程技术网

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

PHP获取图像exif并旋转/调整图像大小,php,image,rotation,Php,Image,Rotation,我正在构建一个应用程序,你可以用手机拍照并上传图像,但你拍摄的肖像图像会自动旋转到横向。相信我,我在发帖前做了很多尝试和研究 我没有先进的PHP技能,但我有一个下面的代码,处理调整大小好,但它不做旋转 有人认为它有什么直接的问题吗 // resizeImage function loadResize($imageName, $imageWidth, $imageHeight, $resizeType) { list($width, $height, $type, $attr) = getimag

我正在构建一个应用程序,你可以用手机拍照并上传图像,但你拍摄的肖像图像会自动旋转到横向。相信我,我在发帖前做了很多尝试和研究

我没有先进的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);
}
//调整图像大小
函数loadResize($imageName、$imageWidth、$imageHeight、$resizeType){
列表($width、$height、$type、$attr)=getimagesize($imageName);
如果($resizeType==“纵向”&&$height saveImage($imageName,100);
}

感谢您的帮助!

在您的示例中,您没有调用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);
?>

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

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

然而,大部分问题都是iOS设备的问题,尤其是从iPhone上拍摄的照片

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

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

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

因为超过90%的问题与来自iOS设备的照片图像有关。 有趣的是,所有的物体都以相同的角度(逆时针90度)转向风景

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

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

程序将检查宽度除以高度是否小于1。 如果是这样的话,它会将其旋转到横向(我的例子中使用90)。 *备注:事实上,我对“风景图片”一点问题都没有

然后,如果图像是“protrait”,用户将复选框保留为未选中状态。 现在程序将检查宽度除以高度是否大于1。 如果是这样,它将把它旋转到protrait(在我的例子中使用-90)。 *备注:到目前为止,这已经解决了我所有iPhone照片的问题

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

这不是太多的工作,问题已经解决了。
*备注:到目前为止,我没有接到任何关于这个问题的电话。

我建议您使用PHP中的imageMagic函数进行检查,这些函数非常简单且有用!好的,我会检查它!谢谢!在您的解决方案中,图像的宽度和高度会被翻转,因此图像会被裁剪