Exemplo n.º 1
1
 /**
  * Create a thumbnail for the given file with the given width and height.
  *
  * @param string $name name of the image to create the thumbnail of
  * @param string $fullPath absolute path to the image to create the thumbnail of
  * @param int $width width to resize to (Set to 0 to preserve aspect ratio)
  * @param int $height height to resize to (Set to 0 to preserve aspect ratio)
  * @param bool $exact This will preserve aspect ratio by using a crop after the resize
  * @return string path where the thumbnail was created
  * @throws phMagickException
  * @throws Zend_Exception
  */
 public function createThumbnailFromPath($name, $fullPath, $width, $height, $exact = true)
 {
     /** @var SettingModel $settingModel */
     $settingModel = MidasLoader::loadModel('Setting');
     $provider = $settingModel->getValueByName(MIDAS_THUMBNAILCREATOR_PROVIDER_KEY, $this->moduleName);
     $useThumbnailer = $settingModel->getValueByName(MIDAS_THUMBNAILCREATOR_USE_THUMBNAILER_KEY, $this->moduleName);
     $preprocessedFormats = array('mha', 'nrrd');
     $ext = strtolower(substr(strrchr($name, '.'), 1));
     if ($useThumbnailer === 1 && $provider === 'phmagick' && in_array($ext, $preprocessedFormats)) {
         // pre-process the file to get a temporary JPEG file and then feed it to ImageMagick later.
         $preprocessedJpeg = $this->preprocessByThumbnailer($name, $fullPath);
         if (isset($preprocessedJpeg) && file_exists($preprocessedJpeg)) {
             $fullPath = $preprocessedJpeg;
             $ext = strtolower(substr(strrchr($preprocessedJpeg, '.'), 1));
         }
     }
     // create destination
     $tmpPath = UtilityComponent::getTempDirectory('thumbnailcreator');
     $format = $settingModel->getValueByName(MIDAS_THUMBNAILCREATOR_FORMAT_KEY, $this->moduleName);
     if ($format === 'jpeg') {
         $format = MIDAS_THUMBNAILCREATOR_FORMAT_JPG;
     }
     /** @var RandomComponent $randomComponent */
     $randomComponent = MidasLoader::loadComponent('Random');
     $destination = $tmpPath . '/' . $randomComponent->generateInt() . '.' . $format;
     while (file_exists($destination)) {
         $destination = $tmpPath . '/' . $randomComponent->generateInt() . '.' . $format;
     }
     $pathThumbnail = $destination;
     if ($provider === 'phmagick') {
         $imageMagickPath = $settingModel->getValueByName(MIDAS_THUMBNAILCREATOR_IMAGE_MAGICK_KEY, $this->moduleName);
         switch ($ext) {
             case 'pdf':
             case 'mpg':
             case 'mpeg':
             case 'mp4':
             case 'm4v':
             case 'avi':
             case 'mov':
             case 'flv':
             case 'rm':
                 // If this is a video, we have to have the file extension, so symlink it
                 if (function_exists('symlink') && symlink($fullPath, $fullPath . '.' . $ext)) {
                     $p = new phmagick('', $pathThumbnail);
                     $p->setImageMagickPath($imageMagickPath);
                     $p->acquireFrame($fullPath . '.' . $ext, 0);
                     if ($exact) {
                         // preserve aspect ratio by performing a crop after the resize
                         $p->resizeExactly($width, $height);
                     } else {
                         $p->resize($width, $height);
                     }
                     unlink($fullPath . '.' . $ext);
                 }
                 break;
             default:
                 // Otherwise it is just a normal image
                 $p = new phmagick($fullPath, $pathThumbnail);
                 $p->setImageMagickPath($imageMagickPath);
                 if ($exact) {
                     // preserve aspect ratio by performing a crop after the resize
                     $p->resizeExactly($width, $height);
                 } else {
                     $p->resize($width, $height);
                 }
                 break;
         }
         // delete temporary file generated in pre-process step
         if (isset($preprocessedJpeg) && file_exists($preprocessedJpeg)) {
             unlink($preprocessedJpeg);
         }
     } elseif ($provider === MIDAS_THUMBNAILCREATOR_PROVIDER_GD || $provider === MIDAS_THUMBNAILCREATOR_PROVIDER_IMAGICK) {
         try {
             $manager = new \Intervention\Image\ImageManager(array('driver' => $provider));
             $image = $manager->make($fullPath);
             if ($height === 0) {
                 $image->widen($width);
             } elseif ($width === 0) {
                 $image->heighten($height);
             } else {
                 $image->resize($width, $height);
             }
             $image->save($pathThumbnail);
         } catch (\RuntimeException $exception) {
             Zend_Registry::get('logger')->err($exception->getMessage());
             throw new Zend_Exception('Thumbnail creation failed');
         }
     } else {
         throw new Zend_Exception('No thumbnail provider has been selected');
     }
     return $pathThumbnail;
 }
Exemplo n.º 2
0
 /**
  * tries to resize an image to the exact size wile mantaining aspect ratio, 
  * the image will be croped to fit the measures
  * @param $width
  * @param $height
  */
 function resizeExactly(phmagick $p, $width, $height)
 {
     //requires Crop plugin
     //requires dimensions plugin
     $p->requirePlugin('crop');
     $p->requirePlugin('info');
     list($w, $h) = $p->getInfo($p->getSource());
     if ($w > $h) {
         $h = $height;
         $w = 0;
     } else {
         $h = 0;
         $w = $width;
     }
     $p->resize($w, $h)->crop($width, $height);
 }
Exemplo n.º 3
0
 /**
  * Creates a thumbnail of an image, if it doesn't exits
  *
  *
  * @param String $imageUrl - The image Url
  * @param Mixed $width - String / Integer
  * @param Mixed $height - String / Integer
  * @param boolean: False: resizes the image to the exact porportions (aspect ratio not preserved). True: preserves aspect ratio, only resises if image is bigger than specified measures
  *
  * @return String - the thumbnail URL
  */
 function onTheFly(phmagick $p, $imageUrl, $width, $height, $exactDimentions = false, $webPath = '', $physicalPath = '')
 {
     //convert web path to physical
     $basePath = str_replace($webPath, $physicalPath, dirname($imageUrl));
     $sourceFile = $basePath . '/' . basename($imageUrl);
     //naming the new thumbnail
     $thumbnailFile = $basePath . '/' . $width . '_' . $height . '_' . basename($imageUrl);
     $P->setSource($sourceFile);
     $p->setDestination($thumbnailFile);
     if (!file_exists($thumbnailFile)) {
         $p->resize($p, $width, $height, $exactDimentions);
     }
     if (!file_exists($thumbnailFile)) {
         //if there was an error, just use original file
         $thumbnailFile = $sourceFile;
     }
     //returning the thumbnail url
     return str_replace($physicalPath, $webPath, $thumbnailFile);
 }