PHP处理图片(orientation)旋转问题
在PHP日常开发中,经常需要处理前端上传来的图片,最简单的就是保存一下,有时候需要进行一些处理,比如压缩图片,生成缩略图等等
这些还好说,更坑的是,有时候前端上传的图片,服务端转存后,莫名其妙的旋转了90度,旋转了180度。关键是有的时候这些图片在前端显示是正常的,到服务端转存后,就出问题了,前端的同学表示不背这锅,这是你后端的问题
没办法,自己解决吧
PHP中有处理图片旋转的拓展exif,要处理图片旋转问题,必须安装这个拓展,exif拓展依赖php_mbstring这个拓展,所以要安装这两个拓展。
在phpinfo中能看到这两个拓展,就OK了。
如果没有安装,就需要手动安装一下了,只说Linux上怎么安装,Windows上一般都用WAMP,WAMP可以一键安装的。
Linux推荐使用源码安装
- 首先下载拓展的源码,可以去官网下载,我用的php7.2,可以在这里下载https://pan.baidu.com/s/1RmgFY3bAkyK_Yu636zrx3g 提取码: pm7y
- 编译安装
- 进入源码的目录
- 使用
/usr/local/php/bin/phpize
命令,生成configure(假设php安装在/usr/local/php目录下)- 使用
./configure --with-php-config=/usr/local/php/bin/php-config
命令生成 Makefile文件- 使用
make && make install
命令编译安装- 去修改php.ini文件(可能在/usr/local/php/etc目录或者/etc/php/目录下),找到 extension 把
extension=mbstring
和extension=exif
前面的;去掉没有的加上这两句,把extension=mbstring
放在extension=exif
前面,保存退出- 重启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
中的值代表什么含义,我还没查到,等查到再补充吧,欢迎大佬评论区补充
说一下遇到的坑
- 获取图片信息,在php7之前,用
exif_imagetype()
函数,在php7以后用exif_read_data()
函数 - 一定要判断是获取到图片信息的数组中否存在
Orientation
字段,因为很多图片中没有没有这个属性,或者属性为空,一点要判断
PHP处理图片(orientation)旋转问题相关推荐
- 用css3制作旋转加载动画的几种方法
2019独角兽企业重金招聘Python工程师标准>>> 以WebKit为核心的浏览器,例如Safari和Chrome,对HTML5有着很好的支持,在移动平台中这两个浏览器对应的就是i ...
- iOS屏幕旋转 浅析
一.两种orientation 了解屏幕旋转首先需要区分两种orientation 1.device orientation 设备的物理方向,由类型UIDeviceOrientation表示,当前设备 ...
- 解决uniapp在h5图片上传后旋转90度问题(editor同样适用)
问题简单描述 以往没有uniapp上传图片的经验,这两天刚接手这个功能,遇到了一系列糟心的事情 1.第一版我使用的插件市场的图片压缩插件,出现的问题:低版本安卓拍照出现闪退白屏等问题 2.第二版我换了 ...
- 移动端h5页面拍照上传图片的时候图片旋转问题
0. 问题描述 在项目中有个图片上传的组件(vue项目) <inputref="input"type="file"multiple="false ...
- 移动端适配(必须要知道的,亲测有效)
关于移动端适配(必须要知道的,亲测有效) 一.各种单位概念理解 二.移动,web开发 三.移动端适配 1.视口(viewport)概念 2.视口(viewport)适配(代码) 3.rem单位适配 f ...
- QT+Halcon综合示例:clip回形针2D位姿检测
QT+Halcon综合示例(一):clip回形针2D位姿检测 0.halcon源码: 1.Qt代码: 2.运行结果: 下载:clip回形针2D位姿检测 0.halcon源码: * clip.hdev: ...
- Air test ios类使用
1.iOS手机的滑动 相关代码 #python class IOS(Device):...@property#获取屏幕的尺寸def display_info(self):if not self._si ...
- 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 ...
- 计算机视觉:图像映射与全景拼接
目录 1.图像拼接的原理 1.1 基本流程 1.2 图像拼接的几何原理 1.3 2D图像变换原理 1.3.1 2D 图像变换类型 1.3.2 变换参数求解 1.3.3 2D 图像变换 1.4 直线拟合 ...
最新文章
- 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
- sql 相加_SQL-多表查询
- 柯美smb扫描出现服务器连接错误_柯尼卡美能达363,正确设置了SMB扫描,文件夹也共享了,但扫描后,显示错误为 登录错误,是为什么...
- 基于概率论的分类方法—朴素贝叶斯
- C语言课程设计选哪个,C语言课程设计选题及要求.docx
- ApplicationContext和BeanFactory
- 执行命令npm install XXX后仍然提示 Cannot find Module XXX
- 3.5. Ticket
- SVG与CSS的特殊性
- python清空列表_Python 内存分配时的小秘密
- 五年了,我在 CSDN 的两个一百万。
- 隔离升压电源模块24V功率可达40W宽电压输入高电压稳压输出
- 哪些深度相机有python接口_三种主流深度相机介绍
- 用贾樟柯访谈评《疯狂的程序员》
- B2C电商网站提交订单支付流程
- 防止被运营商DNS劫持 作者:zzc
- 一位期货老将的经验之谈(转)
- zeppelin 连接 spark报错
- 欢迎前来日本王子酒店享用当地应季美食
- 国赛2019逆向 easyGo lebel:golang / debug段的用处
热门文章
- centos7 没有pip命令_Linux(CentOS7)部署系列---Docker编排应用部署方案
- python 函数的定义与调用_Python函数定义和函数调用
- android微信小程序自动填表_微信小程序自动化,记录趟过的坑!
- 光猫直连电脑不能上网_电脑插上网线不能上网怎么办
- clickhouse原理解析与开发实战 pdf_重识SSM,“超高频面试点+源码解析+实战PDF”,一次性干掉全拿走...
- 【杂谈】有三AI季划的最核心价值在哪,听听这些同学怎么说!
- 中国城市园林绿化行业十四五规划方向与投资前景建议报告2022版
- 中国全装修行业发展形势及投资决策建议报告2022版
- 全球及中国吉他霉素预混剂行业创新现状与可持续发展分析报告2022-2027年版
- 安全中间件与应用服务间如用session