现象
用相机拍摄的图片,预览正常,上传到站点显示也正常,但是生成缩略图会被旋转。
原因
这种情况是因为生成缩略图用到的getimagesize方法将宽度和高度取反了,取反的原因是图片含有EXIF信息方向为旋转 90 度
比如原图:
getimagesize 方法获取的结果
检查原图 EXIF
解决办法
开启 EXIF 扩展,从图片文件中读取 EXIF 头信息
重新计算宽度和高度,并将原图旋转还原
$org_info = @getimagesize($img);
$img_org = $this->img_resource($img, $org_info[2]);
$exif = @exif_read_data($img);
if (isset($exif['Orientation'])){
$exif_org_info = array();
switch ($exif['Orientation'])
{
// -90 degrees rotation
case 6:
$img_org = imagerotate($img_org, -90, 0);
$exif_org_info = array($org_info[1], $org_info[0]);
break;
case 8:
// 90 degrees rotation
$img_org = imagerotate($img_org, 90, 0);
$exif_org_info = array($org_info[1], $org_info[0]);
break;
case 3:
// 180 rotation
//$exif_org_info = array($org_info[0], $org_info[1]);
break;
}
//重新赋值
if (isset($exif_org_info[0]) && $exif_org_info[0])
{
$org_info[0] = $exif_org_info[0];
$org_info[1] = $exif_org_info[1];
}
}
后续
用 $org_info 计算好缩略图的宽高,拿 $img_org 作为缩略图的源图象资源,生成缩略图。