在PHP日常开发中,经常需要处理前端上传来的图片,最简单的就是保存一下,有时候需要进行一些处理,比如压缩图片,生成缩略图等等
这些还好说,更坑的是,有时候前端上传的图片,服务端转存后,莫名其妙的旋转了90度,旋转了180度。关键是有的时候这些图片在前端显示是正常的,到服务端转存后,就出问题了,前端的同学表示不背这锅,这是你后端的问题
没办法,自己解决吧
PHP中有处理图片旋转的拓展exif,要处理图片旋转问题,必须安装这个拓展,exif拓展依赖php_mbstring这个拓展,所以要安装这两个拓展。

在phpinfo中能看到这两个拓展,就OK了。
如果没有安装,就需要手动安装一下了,只说Linux上怎么安装,Windows上一般都用WAMP,WAMP可以一键安装的。

Linux推荐使用源码安装

  1. 首先下载拓展的源码,可以去官网下载,我用的php7.2,可以在这里下载https://pan.baidu.com/s/1RmgFY3bAkyK_Yu636zrx3g 提取码: pm7y
  2. 编译安装
  1. 进入源码的目录
  2. 使用/usr/local/php/bin/phpize命令,生成configure(假设php安装在/usr/local/php目录下)
  3. 使用./configure --with-php-config=/usr/local/php/bin/php-config命令生成 Makefile文件
  4. 使用make && make install命令编译安装
  5. 去修改php.ini文件(可能在/usr/local/php/etc目录或者/etc/php/目录下),找到 extensionextension=mbstringextension=exif前面的;去掉没有的加上这两句,把extension=mbstring放在extension=exif前面,保存退出
  6. 重启Apache或者nginx,查看phpinfo,有没有这两个拓展

准备工作OK了,可以开始写代码了,只写一下简单的逻辑代码吧

        $str = '文件路径';$savePath='保存路径';$image = imagecreatefromstring(file_get_contents($str));$exif = exif_read_data($str);if (!empty($exif['Orientation'])) {switch ($exif['Orientation']) {case 8:$image = imagerotate($image, 90, 0);break;case 3:$image = imagerotate($image, 180, 0);break;case 6:$image = imagerotate($image, -90, 0);break;}imagejpeg($image, $savePath);imagedestroy($image);}

Orientation中的值代表什么含义,我还没查到,等查到再补充吧,欢迎大佬评论区补充

说一下遇到的坑

  1. 获取图片信息,在php7之前,用exif_imagetype()函数,在php7以后用exif_read_data()函数
  2. 一定要判断是获取到图片信息的数组中否存在Orientation字段,因为很多图片中没有没有这个属性,或者属性为空,一点要判断

PHP处理图片(orientation)旋转问题相关推荐

  1. 用css3制作旋转加载动画的几种方法

    2019独角兽企业重金招聘Python工程师标准>>> 以WebKit为核心的浏览器,例如Safari和Chrome,对HTML5有着很好的支持,在移动平台中这两个浏览器对应的就是i ...

  2. iOS屏幕旋转 浅析

    一.两种orientation 了解屏幕旋转首先需要区分两种orientation 1.device orientation 设备的物理方向,由类型UIDeviceOrientation表示,当前设备 ...

  3. 解决uniapp在h5图片上传后旋转90度问题(editor同样适用)

    问题简单描述 以往没有uniapp上传图片的经验,这两天刚接手这个功能,遇到了一系列糟心的事情 1.第一版我使用的插件市场的图片压缩插件,出现的问题:低版本安卓拍照出现闪退白屏等问题 2.第二版我换了 ...

  4. 移动端h5页面拍照上传图片的时候图片旋转问题

    0. 问题描述 在项目中有个图片上传的组件(vue项目) <inputref="input"type="file"multiple="false ...

  5. 移动端适配(必须要知道的,亲测有效)

    关于移动端适配(必须要知道的,亲测有效) 一.各种单位概念理解 二.移动,web开发 三.移动端适配 1.视口(viewport)概念 2.视口(viewport)适配(代码) 3.rem单位适配 f ...

  6. QT+Halcon综合示例:clip回形针2D位姿检测

    QT+Halcon综合示例(一):clip回形针2D位姿检测 0.halcon源码: 1.Qt代码: 2.运行结果: 下载:clip回形针2D位姿检测 0.halcon源码: * clip.hdev: ...

  7. Air test ios类使用

    1.iOS手机的滑动 相关代码 #python class IOS(Device):...@property#获取屏幕的尺寸def display_info(self):if not self._si ...

  8. v2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\imgwarp.cpp:5594: error: (-215) (M0.t

    这里是用于处理图片的旋转等操作 生成M要用  M= np.float32( [ ] ),而不是 M = np.array( [ ] ) M = np.array([[1,0,100],[0,1,200 ...

  9. 计算机视觉:图像映射与全景拼接

    目录 1.图像拼接的原理 1.1 基本流程 1.2 图像拼接的几何原理 1.3 2D图像变换原理 1.3.1 2D 图像变换类型 1.3.2 变换参数求解 1.3.3 2D 图像变换 1.4 直线拟合 ...

最新文章

  1. 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
  2. sql 相加_SQL-多表查询
  3. 柯美smb扫描出现服务器连接错误_柯尼卡美能达363,正确设置了SMB扫描,文件夹也共享了,但扫描后,显示错误为 登录错误,是为什么...
  4. 基于概率论的分类方法—朴素贝叶斯
  5. C语言课程设计选哪个,C语言课程设计选题及要求.docx
  6. ApplicationContext和BeanFactory
  7. 执行命令npm install XXX后仍然提示 Cannot find Module XXX
  8. 3.5. Ticket
  9. SVG与CSS的特殊性
  10. python清空列表_Python 内存分配时的小秘密
  11. 五年了,我在 CSDN 的两个一百万。
  12. 隔离升压电源模块24V功率可达40W宽电压输入高电压稳压输出
  13. 哪些深度相机有python接口_三种主流深度相机介绍
  14. 用贾樟柯访谈评《疯狂的程序员》
  15. B2C电商网站提交订单支付流程
  16. 防止被运营商DNS劫持 作者:zzc
  17. 一位期货老将的经验之谈(转)
  18. zeppelin 连接 spark报错
  19. 欢迎前来日本王子酒店享用当地应季美食
  20. 国赛2019逆向 easyGo lebel:golang / debug段的用处

热门文章

  1. centos7 没有pip命令_Linux(CentOS7)部署系列---Docker编排应用部署方案
  2. python 函数的定义与调用_Python函数定义和函数调用
  3. android微信小程序自动填表_微信小程序自动化,记录趟过的坑!
  4. 光猫直连电脑不能上网_电脑插上网线不能上网怎么办
  5. clickhouse原理解析与开发实战 pdf_重识SSM,“超高频面试点+源码解析+实战PDF”,一次性干掉全拿走...
  6. 【杂谈】有三AI季划的最核心价值在哪,听听这些同学怎么说!
  7. 中国城市园林绿化行业十四五规划方向与投资前景建议报告2022版
  8. 中国全装修行业发展形势及投资决策建议报告2022版
  9. 全球及中国吉他霉素预混剂行业创新现状与可持续发展分析报告2022-2027年版
  10. 安全中间件与应用服务间如用session