Exemplo n.º 1
0
 /**
  * Creates a thumbnail for the specified file and returns that file object
  * or the input file if thumbnails are disabled or not supported.
  *
  * @param MOXMAN_Vfs_IFile $file File to generate thumbnail for.
  * @return MOXMAN_Vfs_IFile File instance that got generated or input file.
  */
 public function createThumbnail(MOXMAN_Vfs_IFile $file, $localTempFile = null)
 {
     $config = $file->getConfig();
     // Thumbnails disabled in config
     if (!$config->get('thumbnail.enabled')) {
         return $file;
     }
     // File is not an image
     if (!MOXMAN_Media_ImageAlter::canEdit($file)) {
         return $file;
     }
     // No write access to parent path
     $dirFile = $file->getParentFile();
     if (!$dirFile->canWrite()) {
         return $file;
     }
     $thumbnailFolderPath = MOXMAN_Util_PathUtils::combine($file->getParent(), $config->get('thumbnail.folder'));
     $thumbnailFile = MOXMAN::getFile($thumbnailFolderPath, $config->get('thumbnail.prefix') . $file->getName());
     // Never generate thumbs in thumbs dirs
     if (basename($file->getParent()) == $config->get('thumbnail.folder')) {
         return $file;
     }
     $thumbnailFolderFile = $thumbnailFile->getParentFile();
     if ($thumbnailFile->exists()) {
         if ($file->isDirectory()) {
             return $file;
         }
         return $thumbnailFile;
     }
     if (!$thumbnailFolderFile->exists()) {
         $thumbnailFolderFile->mkdir();
         $this->fireThumbnailFileAction(MOXMAN_Vfs_FileActionEventArgs::ADD, $thumbnailFolderFile);
     }
     // TODO: Maybe implement this inside MOXMAN_Media_ImageAlter
     if ($file instanceof MOXMAN_Vfs_Local_File) {
         if ($config->get('thumbnail.use_exif') && function_exists("exif_thumbnail") && preg_match('/jpe?g/i', MOXMAN_Util_PathUtils::getExtension($file->getName()))) {
             $imageType = null;
             $width = 0;
             $height = 0;
             try {
                 // Silently fail this, hence the @, some exif data can be corrupt.
                 $exifImage = @exif_thumbnail($localTempFile ? $localTempFile : $file->getInternalPath(), $width, $height, $imageType);
                 if ($exifImage) {
                     $stream = $thumbnailFile->open(MOXMAN_Vfs_IFileStream::WRITE);
                     $stream->write($exifImage);
                     $stream->close();
                     $this->fireThumbnailFileAction(MOXMAN_Vfs_FileActionEventArgs::ADD, $thumbnailFile);
                     return $thumbnailFile;
                 }
             } catch (Exception $e) {
                 // Ignore exif failure
             }
         }
     }
     $imageAlter = new MOXMAN_Media_ImageAlter();
     if ($localTempFile) {
         $imageAlter->load($localTempFile);
     } else {
         $imageAlter->loadFromFile($file);
     }
     $imageAlter->createThumbnail($config->get('thumbnail.width'), $config->get('thumbnail.height'), $config->get('thumbnail.mode', "resize"));
     $imageAlter->saveToFile($thumbnailFile, $config->get('thumbnail.jpeg_quality'));
     $this->fireThumbnailFileAction(MOXMAN_Vfs_FileActionEventArgs::ADD, $thumbnailFile);
     return $thumbnailFile;
 }