PHP根据图片Orientation旋转图片

最近发现发送到微信公众平台的图片被旋转了90度,导致后续操作出错。后来仔细研究,发现用iphone前置摄像头拍出来的照片会自动镜像,而且会右旋90度,之前TX服务器会处理这种情况,貌似最近不干了,害客户抱怨我这里的问题。

然后开始研究服务器传回来照片的格式,发现exif里面Orientation的值为6,正好是右旋了90度,正好可以根据这个来自动调整图片。

首先读取exif值

$exif = exif_read_data($src, 0, true);

if($exif[‘IFD0’][‘Orientation’]==6){
flip($src,$src,-90);
}

其实还有其他方向,也可以根据这个来旋转,我这里只需要这么多。

另外附上flip方法

function flip($filename,$src,$degrees=90)
{
//读取图片
$data = @getimagesize($filename);
if($data==false)return false;
//读取旧图片
switch ($data[2]) {
case 1:
$src_f = imagecreatefromgif($filename);break;
case 2:
$src_f = imagecreatefromjpeg($filename);break;
case 3:
$src_f = imagecreatefrompng($filename);break;
}
if($src_f==””)return false;
$rotate = @imagerotate($src_f, $degrees,0);
if(!imagejpeg($rotate,$src,100))return false;
@imagedestroy($rotate);
return true;
}

 

万一你机器上面没有exif模块,参照我前一篇博文。