联系官方销售客服

1835022288

028-61286886

开发框架 版主:迅睿框架研发组
怎样防止系统自动把图片旋转90度
类型:迅睿CMS 更新时间:2023-04-14 11:37:00 图片压缩

开启图片压缩时怎样防止系统自动把图片旋转90度?

回帖
  • 迅睿框架联合创始人
    #1楼    迅睿框架联合创始人
    2023-03-31 11:15:21
    Chrome 0
    cms并不会进行旋转图片
  • qq119604
    #2楼    qq119604
    2023-03-31 16:56:51
    Edge 0
    迅睿框架联合创始人 只有移动端上传手机照片的时候会自动旋转,如果开启压缩的话,缩略图和原图都会旋转,不开启压缩只有缩略图旋转。
  • qq119604
    #3楼    qq119604
    2023-03-31 16:59:19
    Edge 0
    感觉是手机拍摄角度的exif不一样。
  • qq119604
    #4楼    qq119604
    2023-04-14 11:37:00
    Edge 0
    问题找到了,就是手机拍摄角度影响了exif信息。修改了一下Image类,用exif扩展把图片旋转回来即可。

    // 图片压缩处理
    public function reduce($imgsrc, $cw) { list($width, $height, $type) = getimagesize($imgsrc); $angle = $this->detect_orientation($imgsrc); if ($angle===90 || $angle===270){ $width = $height; $height = $width; } if ($width > $cw) { $per = $cw / $width;//计算比例 $new_width = floor($width * $per); //压缩后的图片宽 $new_height = floor($height * $per); //压缩后的图片高 switch ($type) { case 1: // gif break; case 2: //header('Content-Type:image/jpeg'); $image_wp = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($imgsrc); if($angle) { $image = imagerotate($image, $angle, 0); } imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //90代表的是质量、压缩图片容量大小 imagejpeg($image_wp, $imgsrc, 100); imagedestroy($image_wp); imagedestroy($image); break; case 3: header('Content-Type:image/png'); $image_wp = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefrompng($imgsrc); if($angle) { $image = imagerotate($image, $angle, 0); } //2.上色 $color=imagecolorallocate($image_wp,255,255,255); //3.设置透明 imagecolortransparent($image_wp,$color); imagefill($image_wp,0,0,$color); imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //90代表的是质量、压缩图片容量大小 imagejpeg($image_wp, $imgsrc, 100); imagedestroy($image_wp); imagedestroy($image); break; case 18: header('Content-Type:image/webp'); $image_wp = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromwebp($imgsrc); if($angle) { $image = imagerotate($image, $angle, 0); } imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //90代表的是质量、压缩图片容量大小 imagewebp($image_wp, $imgsrc, 100); imagedestroy($image_wp); imagedestroy($image); break; } } else { CI_DEBUG(@反馈BUG) && log_message('debug', '系统要求宽度>'.$cw.'px才进行压缩处理,当前图片宽度='.$width.',不满足压缩条件:'.$imgsrc); } return; } //检测图片的拍摄角度, 返回需要旋转回正常的角度,需要开启php的exif扩展 public function detect_orientation($imgsrc) { if (function_exists('exif_read_data')) { $ori_type = exif_read_data($imgsrc)['Orientation']; switch ($ori_type) { case 6: return 270; case 3: return 180; case 8: return 90; default: return 0; } } else { return 0; } }