我正在尝试通过EXIF DateTime Original对图​​像文件数组进行排序,使用stat()替换mtime对图像进行排序的原始代码。

用于按mtime对图像文件进行排序的原始代码如下:

// display photos in album
$src_folder = $mainFolder.'/'.$_REQUEST['album']; 
$src_files = array_diff(scandir($src_folder ), array('..', '.'));
$files = array();

/*** sort by most recent uploaded file ***/
foreach ($src_files as $key=>$img) {
    $stat_folders = stat($src_folder .'/'. $img);
    $file_time[$key] = $stat_folders['ctime'];
}
array_multisort($file_time, SORT_DESC, $src_files);
/*** end sort ***/

我已经测试了以下代码,可以根据需要对数组进行排序:

function getExifDate($filename)
{
    $exif_odate = exif_read_data($filename, 0, true);
    if($exif_odate === false){
        return filemtime($filename);
    }
    if(isset($exif_odate['EXIF']['DateTimeOriginal'])){
        return strtotime($exif_odate['EXIF']['DateTimeOriginal']);
    } else {
        return filemtime($filename);
    }
}
$src_folder = 'folder/'; 
$src_files = glob($src_folder . '*.jpg'); 
array_multisort(array_map('getExifDate', $src_files), SORT_NUMERIC, SORT_DESC, $src_files);

但是,当我尝试使用以下代码集成新的排序方法时:

// display photos in album
$src_folder = $mainFolder.'/'.$_REQUEST['album']; 
$src_files = array_diff(scandir($src_folder ), array('..', '.'));
$files = array();

/*** sort files by date photo taken ***/
function getExifDate(){
    global $src_folder, $src_files;

    $src_images = array();
    foreach ($src_files as $img){       
        $exif_odate = exif_read_data($img, 0, true);
        //      $exif_odate = exif_read_data($src_folder . $img, "FILE,COMPUTED,ANY_TAG,IFD0,THUMBNAIL,COMMENT,EXIF", true);   <-- doesn't work either!
        $src_date = strtotime($exif_odate['EXIF']['DateTimeOriginal']);
        $src_images[$img] = $src_date;
    }
}
array_multisort(array_map('getExifDate', $src_files), SORT_NUMERIC, SORT_DESC, $src_files);
/*** end sort ***/

加载页面时,会为尝试读取的每个图像文件生成以下错误消息:

警告:exif_read_data():无法打开文件...

参考以下代码行:

$exif_odate = exif_read_data($img, 0, true);

将该行代码更改为以下内容没有任何区别:

$exif_odate = exif_read_data($src_folder . $img, "FILE,COMPUTED,ANY_TAG,IFD0,THUMBNAIL,COMMENT,EXIF", true);

...并且图像缩略图显示未分类...不可避免。

任何有关如何解决此问题的指导将不胜感激。

===============>>#1 票数:0 已采纳

感谢04FS帮助我解决问题:

只需更换以下原始代码:

/*** sort by most recent uploaded file ***/
foreach ($src_files as $key=>$img) {
    $stat_folders = stat($src_folder .'/'. $img);
    $file_time[$key] = $stat_folders['ctime'];
}
array_multisort($file_time, SORT_DESC, $src_files);
/*** end sort ***/

有:

/*** sort files by date photo taken ***/
foreach ($src_files as $key=>$img){       
    $exif_odate = exif_read_data($src_folder . '/' . $img, 0, true);
    $file_time[$key] = strtotime($exif_odate['EXIF']['DateTimeOriginal']);
}
array_multisort($file_time, SORT_NUMERIC, SORT_DESC, $src_files);
/*** end sort ***/

解决了排序问题。 :)

  ask by ridgedale translate from so

未解决问题?本站智能推荐:

2回复

php exif_read_data错误?

我正在使用php构建的某些软件。 适用于汽车经销商网站。 rpnmotorsinc.net 问题是能够上传图像。 如果我上载大多数jpg或jpeg文件,则通常可以正常上传。 由于我的客户不想调整尺寸/重新保存图像,因此他希望直接将佳能相机中的照片拍摄到计算机上以上传到网站,而无需重
5回复

PHP exif_read_data非法的IFD大小

我正在开发一个应用程序,我在其中修改从AWS桶下载的jpeg文件的方向(如果存在)。 在这里,您可以验证此图像是否具有exif旋转部分。 我下载图像 在我尝试通过Gregwar Image库修复方向之后。 我尝试了几个图像,我总是收到消息 我认为这是一个与我如
3回复

PHP:exif_read_data()未定义

我现在正在学习如何从图像中提取exif。我写了这样的简单代码: 但是,运行代码时,未定义的exif_read_data()存在致命错误。 我是一个Windows用户,我已经像这样修改了php.ini: 谢谢你的帮助。
2回复

PHP exif_read_data不再提取GPS位置

我刚刚通过自制软件安装了composer,brew似乎安装了新版本的php(5.6.24)。 从那时起,使用exif_read_data提取其他元数据(模型,曝光,iso等),但不再从照片中提取“GPSLatitude”等GPS信息。 我通过exiftool(独立的非php程序)运行相同
2回复

exif_read_data()读取的部分EXIF数据已损坏

当我使用exif_read_data()从原始文件读取EXIF数据时,很多数据都被破坏了。 还是我想。 我要读取的文件是Pentax Kx相机的DNG Raw文件。 这是一个演示: http : //server.patrikelfstrom.se/exif/? file= _IGP
1回复

exif_read_data:关键字解码错误

我正在使用exif_read_data()从上传的图片中提取exif数据。 这在我的Windows机器上运行良好,但在装有最新XAMPP的Mac上,除关键字/标记外,似乎所有字段均已正确提取。 如果我在文件中查找,则相机模型(已正确提取)以ASCII编码(似乎每个字符一个字节)。 但是,关
1回复

exif_read_data()说给定资源

我从这里获得了一个代码http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php来获取用户调整尺寸后发送的图像。 这是发送图像时的处理方式。 这是image_resize.php的一部分: 我不
1回复

PHP 7.2上的exif_read_data不会返回所有元数据

在PHP 7.2上,内置函数exif_read_data向PHP 7.1返回不同的信息。 这是我使用7.2时得到的: php -r 'var_export(exif_read_data("x.jpg", "ANY_TAG"));' 但是,当我在7.1上运行完全相同的代码时,我
5回复

使用PHP exif_read_data获取照片的“拍摄日期”而不是“修改日期”

我正在使用exif_read_data PHP函数从照片中检索创建日期(请参阅下面的代码。)从未修改的照片中检索的日期返回“Date Taken”。 那些已被修改的 - “修改日期”。 有没有办法让照片拍摄日期,忽略“修改日期”字段? 谢谢。 编辑:我认为$ exif_data
1回复

将文件移动到其他服务器后,为什么exif_read_data()不起作用?

我正在尝试将程序从一台服务器移到另一台服务器,并且相同的脚本无法正常工作,我无法弄清原因...下面是我的脚本的缩小版本,但失败了: 工作的服务器吐出一个简单的 ...但是不会抛出的那个... 两者都启用了EXIF支持(均为1.4版)。 旧服务器上的PHP版本为5.3.5