阅读大量图像EXIF日期时PHP速度问题

时间:2015-09-26 16:43:19

标签: php performance exif

我想列出并按日期排序目录中的图片(然后与数据库进行比较并显示不在数据库中的图片)。

我有几千个,并且已经花了几秒钟来读取filetime()日期,但如果我想使用EXIF日期,它甚至会更慢。

以下是我现在使用的功能,您认为我可以加快这个过程吗?

  1. 读取目录中的文件并尝试从文件中提取EXIF日期,否则读取filetime():
  2. `function list_images ($path)
    {
            $images = array();
            foreach (scandir($path) as $node)
            {
                    $nodePath = $path . DIRECTORY_SEPARATOR . $node;
                    if (is_dir($nodePath) OR !preg_match("£.jpg|.png|.bmp|.gif£", $node)) continue;
                    if (preg_match('£.jpg£i', $node) AND exif($nodePath, array('date'))['date'] != '')
                    {
                            $images[$node] = strtotime(exif($nodePath, array('date'))['date']);
                    }
                    else
                    {
                            $images[$node] = filemtime($nodePath);
                    }
    
            }
            arsort($images);
            return $images;
    }`
    1. 通用(大)exif函数:
    2.   `function exif($imagePath, $exif = '')
          {
                  if ($exif === '') $exif[] = 'All';
                  if ((isset($imagePath)) and (file_exists($imagePath)))
                  {
          // There are 2 arrays which contains the information we are after, so it's easier to state them both
                          $exif_ifd0 = @read_exif_data($imagePath ,'IFD0' ,0);
                          $exif_exif = @read_exif_data($imagePath ,'EXIF' ,0);
          // ... (other exif groups)
                          $notFound = "";
                          $return = array();
          // ... (other exif data)
          // Date
                          if (in_array('date', $exif) OR in_array('All', $exif))
                          {
                                  if (@array_key_exists('DateTimeOriginal', $exif_exif))
                                  {
                                          $camDate = $exif_exif['DateTimeOriginal']; 
                                  }
                                  elseif (@array_key_exists('DateTime', $exif_ifd0))
                                  {
                                          $camDate = $exif_ifd0['DateTime'];
                                  }
                                  else
                                  {
                                          $camDate = $notFound;
                                  }
                                  $return['date'] = $camDate;
                          }
          }`
      

      问题(和问题!)是关于EXIF读取性能的,但也许可以使用另一个进程,而不是检索数组中的所有图像日期,从该数组中减去数据库结果,然后显示(20左右)最近的?

0 个答案:

没有答案