PHP图片旋转问题

最近有一个项目需要将图片转成pdf,在测试中发现部分图片在pdf中显示是旋转的,打断点发现使用php函数getimageSize获取图片的宽高发现这个图片也是旋转过的,不过使用系统自带的看图软件查看图片却是正的,这就引起了我的兴趣。

getimageSize

首先说一说getimageSize这个函数,getimageSize可以获取图片的宽、高、图片类型等基本数据,直接传入图片的文件地址或者url即可

//$img传入图片地址
$imgInfo = getimagesize($img);
var_dump($imgInfo);

我们会得到如下一个数组

array(7) {
  [0]=>
  int(4032)
  [1]=>
  int(3024)
  [2]=>
  int(2)
  [3]=>
  string(26) "width="4032" height="3024""
  ["bits"]=>
  int(8)
  ["channels"]=>
  int(3)
  ["mime"]=>
  string(10) "image/jpeg"
}

其中

  • 索引 0 包含图像宽度的像素值
  • 索引 1 包含图像高度的像素值。
  • 索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 =
    TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 =
    JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP
    4.3.0 新加的 IMAGETYPE 常量对应。
  • 索引 3 是文本字符串,内容为“height=“yyy” width=“xxx””,可直接用于 IMG 标记。
  • 索引 channels 给出的是图像的通道值,RGB 图像默认是 3
  • 索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如:
    header(“Content-type: image/jpeg”);

从宽高上看这一个宽大于高的图片,矮胖型,但是实际上这个图片却是瘦高型的,查阅资料发现图片确实是一个矮胖,不过却有一个属性在捣乱,这就是EXIF

EXIF

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。也就是说除了图片的基本属性之外,针对JPEG、TIFF、RIFF等格式图片还会有EXIF描述属性,也就是导致图片被莫名其妙的旋转了的真凶。
进入 EXIF解析 提交图片
在这里插入图片描述
我们发现了该图片包含的各种详细信息,其中有个信息就是图片被旋转了90度,发现了问题接下来就要想办法把它正过来。

exif_read_data

我们可以使用php函数exif_read_data来进行图片EXIF信息的读取,不过次扩展需要重新编译php,网上有很多办法,这里不再赘述。笔者使用的是公司开发框架下的php,编译起来较为麻烦,所以找了一种直接可以解析图片EXIF信息的工具

jhead

https://www.sentex.ca/~mwandel/jhead/ 下载软件,解压后直接执行make进行编译。
命令行执行

./jhead img.jpg

即可获取图片信息,除此之外jhead还提供了 -autorot 选项直接将图片进行翻转

./jhead -autorot  img.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值