相关参考链接:
图像生成和处理(可交换图像信息):https://www.php.net/manual/zh/book.exif.php
一、EXIF 方向参数 Orientation 简介:
EXIF Orientation 参数让你随便照像但都可以看到正确方向的照片而无需手动旋转(前提要图片浏览器支持,Windows 自带的不支持)。这个参数在有的照片是自带的(也可能没有),看照片时不能自动旋转,修正的方法有两个,一个看不顺眼就旋转,另一个是修改 EXIF 中的 Orientation 参数(XnView 浏览器查看缩略图时可以修改)
Orientation 参数:其中1、3、6、8照片会比较常见,其余参数普通照片基本不会出现
参数 | 旋转方向 |
1 | 0° |
2 | 水平翻转 |
3 | 180° |
4 | 垂直翻转 |
5 | 顺时针90°+水平翻转 |
6 | 顺时针90° |
7 | 顺时针90°+垂直翻转 |
8 | 逆时针90° |
示意图:
二、代码示例
1、PHP.ini开启 exif、gd2相关扩展
2、检测是否存在图片旋转代码示例:
$path = "图片原图地址或上传图片时的临时地址"; //$_FILES['file']['tmp_name'] //>>检测原图是否经过旋转、有些图片可能没有exif信息exif_read_data会抛出异常 try { $exif_data = exif_read_data($path); }catch (\Exception $e){ //>>遇到无法解析的图片 $exif_data = []; } $img_is_rotate = isset($exif_data['Orientation'])?(int)$exif_data['Orientation']:''; //>>上述检测 此处判断保存的图片是否需要进行旋转 if(in_array($img_is_rotate,[3,6,8],true)){ try { //>>旋转图片 此处$path 为原图地址或已将上传文件保存后的地址 imgturn($path,$img_is_rotate); }catch (\Exception $e){ //对应异常处理 die('旋转图片异常!'); } }
3、旋转代码示例(仅供参考):
if (!function_exists('imgturn')) { /** * 旋转图片 * @param $src * @param string $direction */ function imgturn($src,$direction = ''){ $ext = strtolower(pathinfo($src)['extension']); switch ($ext) { case 'gif': $img = imagecreatefromgif($src); break; case 'jpg': case 'jpeg': $img = imagecreatefromjpeg($src); break; case 'png': $img = imagecreatefrompng($src); break; default: die('图片格式错误!'); break; } $width = imagesx($img); $height = imagesy($img); $img2 = imagecreatetruecolor($height,$width); switch ($direction){ case 6: //顺时针90° for ($x = 0; $x < $width; $x++) { for ($y = 0; $y < $height; $y++) { imagecopy($img2, $img, $height - 1 - $y, $x, $x, $y, 1, 1); } } break; case 8: //逆时针90° for ($x = 0; $x < $height; $x++) { for ($y = 0; $y < $width; $y++) { imagecopy($img2, $img, $x, $y, $width - 1 - $y, $x, 1, 1); } } break; case 3: //180° $img2 = imagerotate($img, 180, 0); break; } switch ($ext) { case 'jpg': case "jpeg": imagejpeg($img2, $src, 100); break; case "gif": imagegif($img2, $src, 100); break; case "png": imagepng($img2, $src, 100); break; default: die('图片格式错误!'); break; } imagedestroy($img); imagedestroy($img2); } }
标签:case,src,exif,img,旋转,break,img2,PHP,上传 From: https://www.cnblogs.com/xh-xiaohan/p/18052222