【问题标题】:EXIF does not return orienation details with PHPEXIF 不使用 PHP 返回方向详细信息
【发布时间】:2019-04-10 04:46:00
【问题描述】:

我正在尝试使用 PHP exif_read_data() 函数获取图像方向的详细信息,但不幸的是我无法获得所需的详细信息。我只得到了

数组
(
    [文件] => 数组
        (
            [文件名] => sasfasdfasd-asdf-asdasdf-afdsd-767563900.jpg
            [文件日期时间] => 1541527956
            [文件大小] => 302871
            [文件类型] => 2
            [MimeType] => 图像/jpeg
            [找到的部分] => 评论
        )

    [计算] => 数组
        (
            [html] => 宽度=“1000”高度=“750”
            [身高] => 750
            [宽度] => 1000
            [IsColor] => 1
        )

    [评论] => 数组
        (
            [0] => 创建者:gd-jpeg v1.0(使用 IJG JPEG v90),质量 = 100

        )

)

我正在使用 PHP 7.2 有人可以告诉我如何使用 PHP 获取图像方向的详细信息吗? 我已经使用 PHP 信息检查了我的 GD 库和 EXIF。他们工作正常。

【问题讨论】:

  • 你具体想得到什么?你能提供你如何得到这个数组的代码吗?
  • 感谢您的回复@Ice76。我正在尝试旋转从 Android 手机的相机拍摄的图像。我需要图像方向细节来做到这一点。 <?php $input = 'C://xampp/htdocs/test.jpg'; $exif = exif_read_data($input); print_r($exif); ?> 这是简单的代码,我正在尝试。 Test.png 是从安卓手机上拍摄的图片。
  • 我的错。我得到了答案。我使用的图像是在 PHP 上传过程之后。图像已更改,因此我无法获得所有方向细节。我通过电子邮件从电话中获得了原始图像,并在尝试处理它时获得了所需的详细信息。
  • 很高兴你明白了/!

标签: php exif uiimageorientation


【解决方案1】:

不幸的是,您创建的图像是使用 LibGD 完成的,默认情况下不会写入任何扩展的 EXIF 数据。

作为 PHP 附带的 EXIF 扩展的维护者,我可以向您介绍一下它是如何工作的:

当您使用exif_read_data() 加载图像时,默认情况下会返回上述部分(在您的情况下,COMMENT 除外;因为它是由 LibGD 生成的)。如果在图像的二进制元数据中找到 MAKERNOTE 部分,则 PHP 将尝试将值解析为 PHP[1] 的已知格式之一。

如果签名随后与其中一种已知格式匹配,则 PHP 将从标头中读取所有相关的 IFD(图像文件数据)数据,并尝试根据烘焙的标签列表解析一些标签名称.这使得返回的数组更加依赖于使用,而不是编写像echo $exif['0x0112'];(方向)这样的代码,数组变成了类似:echo $exif['Orientation'];

如果签名不匹配,那么 PHP 仍会尝试读取图像中的相关 EXIF 数据,但不会为非标准标签映射标签。鉴于二进制数据遵循 EXIF 规范,PHP 还将继续读取缩略图数据等内容。

最后; PHP 的 EXIF 扩展是只读的,因此即使您从相关图像中知道自己的方向,恐怕也无法使用 PHP 附带的默认扩展手动编写它。

[1]http://git.php.net/?p=php-src.git;a=blob;f=ext/exif/exif.c;h=d37a61f83da7bd8c14eeaa0d14762e3a4e7c80e6;hb=HEAD#l1336

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2020-09-18
    • 2016-10-27
    • 2018-11-10
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多