Ejemplo n.º 1
0
 private function tinifyDirectory($dir, $recursive, &$report)
 {
     if (!file_exists($dir)) {
         $this->logWarning($dir . ' does not exist', $report);
         return;
     }
     if ($recursive) {
         $Files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
     } else {
         $Files = new FilesystemIterator($dir);
     }
     $extensions = array("png", "jpg", "jpeg");
     $pictures = array();
     foreach ($Files as $fileinfo) {
         if ($fileinfo->isFile() && in_array(strtolower($fileinfo->getExtension()), $extensions)) {
             $pictures[] = $fileinfo;
         }
     }
     $dirFileCounter = 0;
     $dirGainSize = 0;
     // Sort by size
     usort($pictures, function ($a, $b) {
         if ($a->getSize() == $b->getSize()) {
             return 0;
         }
         return $a->getSize() > $b->getSize() ? -1 : 1;
     });
     foreach ($pictures as $fileinfo) {
         $object = new FileCache($fileinfo);
         if ($object->needTinify()) {
             set_time_limit(10);
             $filename = $object->getPathname();
             $fileSize = $object->getSize();
             $object->tinify();
             $newFileSize = $object->getSize();
             $gainSize = $fileSize - $newFileSize;
             $dirFileCounter++;
             $dirGainSize += $gainSize;
             $report->update($gainSize);
             if (isset($this->logger)) {
                 $this->logger->logInfo('[' . $filename . '] ' . $fileSize . '=>' . $newFileSize . ' (' . (100 - (int) ($newFileSize * 100 / $fileSize)) . '%)');
             }
         }
     }
     if (isset($this->logger)) {
         $this->logger->logInfo('[' . $dir . ']: ' . $dirFileCounter . ' files(s), gain: ' . (int) ($dirGainSize / 1024) . 'Ko');
     }
 }