Пример #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;
 }
Пример #2
0
 function getMime(phmagick $p, $file = '')
 {
     if ($file == '') {
         $file = $p->getSource();
     }
     $info = getimagesize($file);
     return $info["mime"];
 }
Пример #3
0
 /**
  * Draws an image with the submited string, usefull for water marks
  *
  * @param $text String - the text to draw an image from
  * @param $format phMagickTextObject - the text configuration
  */
 function fromString(phmagick $p, $text = '', phMagickTextObject $format = null)
 {
     if (is_null($format)) {
         $format = new phMagickTextObject();
     }
     $cmd = $p->getBinary('convert');
     if ($format->background !== false) {
         $cmd .= ' -background "' . $format->background . '"';
     }
     if ($format->color !== false) {
         $cmd .= ' -fill "' . $format->color . '"';
     }
     if ($format->font !== false) {
         $cmd .= ' -font ' . $format->font;
     }
     if ($format->fontSize !== false) {
         $cmd .= ' -pointsize ' . $format->fontSize;
     }
     if ($format->pText != '' && ($text = '')) {
         $text = $format->pText;
     }
     $cmd .= ' label:"' . $text . '"';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #4
0
 /**
  * Attempts to create an image(s) from a File (PDF & Avi are supported on most systems)
  * it grabs the first frame / page from the source file
  * @param $file  String - the path to the file
  * @param $ext   String - the extention of the generated image
  */
 function acquireFrame(phmagick $p, $file, $frames = 0)
 {
     // $cmd = 'echo "" | '; //just a workarround for videos,
     //                    imagemagick first converts all frames then deletes all but the first
     $cmd = $p->getBinary('convert');
     $cmd .= ' "' . $file . '"[' . $frames . ']';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #5
0
 /**
  *
  * @param $width Integer
  * @param $height Integer
  * @param $top Integer - The Y coordinate for the left corner of the crop rectangule
  * @param $left Integer - The X coordinate for the left corner of the crop rectangule
  * @param $gravity phMagickGravity - The initial placement of the crop rectangule
  * @return unknown_type
  */
 function crop(phmagick $p, $width, $height, $top = 0, $left = 0, $gravity = 'center')
 {
     $cmd = $p->getBinary('convert');
     $cmd .= ' ' . $p->getSource();
     if ($gravity != '' || $gravity != phMagickGravity::None) {
         $cmd .= ' -gravity ' . $gravity;
     }
     $cmd .= ' -crop ' . (int) $width . 'x' . (int) $height;
     $cmd .= '+' . $left . '+' . $top;
     $cmd .= ' ' . $p->getDestination();
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #6
0
 /**
  * Flips the image horizonaly and verticaly
  * @return unknown_type
  */
 function reflection(phmagick $p, $size = 60, $transparency = 50)
 {
     $p->requirePlugin('info');
     $source = $p->getSource();
     //invert image
     $this->flipVertical($p);
     //crop it to $size%
     list($w, $h) = $p->getInfo($p->getDestination());
     $p->crop($w, $h * ($size / 100), 0, 0, phMagickGravity::None);
     //make a image fade to transparent
     $cmd = $p->getBinary('convert');
     $cmd .= ' "' . $p->getSource() . '"';
     $cmd .= ' ( -size ' . $w . 'x' . $h * ($size / 100) . ' gradient: ) ';
     $cmd .= ' +matte -compose copy_opacity -composite ';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     //apply desired transparency, by creating a transparent image and merge the mirros image on to it with the desired transparency
     $file = dirname($p->getDestination()) . '/' . uniqid() . '.png';
     $cmd = $p->getBinary('convert');
     $cmd .= '  -size ' . $w . 'x' . $h * ($size / 100) . ' xc:none  ';
     $cmd .= ' "' . $file . '"';
     $p->execute($cmd);
     $cmd = $p->getBinary('composite');
     $cmd .= ' -dissolve ' . $transparency;
     $cmd .= ' "' . $p->getDestination() . '"';
     $cmd .= ' ' . $file;
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     unlink($file);
     //append the source and the relfex
     $cmd = $p->getBinary('convert');
     $cmd .= ' "' . $source . '"';
     $cmd .= ' "' . $p->getDestination() . '"';
     $cmd .= ' -append ';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #7
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);
 }
Пример #8
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);
 }
Пример #9
0
 function edges(phmagick $p, $amount = 10)
 {
     $cmd = $p->getBinary('convert');
     $cmd .= ' -adaptive-sharpen 2x' . $amount;
     $cmd .= ' -background "none" "' . $p->getSource() . '"';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #10
0
 function save(phmagick $p)
 {
     return $p->convert($p);
 }
Пример #11
0
 function convert(phmagick $p)
 {
     $cmd = $p->getBinary('convert');
     $cmd .= ' -quality ' . $p->getImageQuality();
     $cmd .= ' "' . $p->getSource() . '"  "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #12
0
 function autoLevels(phmagick $p)
 {
     $cmd = $p->getBinary('convert');
     $cmd .= ' -normalize ';
     $cmd .= ' -background "none" "' . $p->getSource() . '"';
     $cmd .= ' "' . $p->getDestination() . '"';
     $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }
Пример #13
0
 function border(phmagick $p, $borderColor = "#000", $borderSize = "1")
 {
     $cmd = $p->getBinary('convert');
     $cmd .= ' "' . $p->getSource() . '"';
     $cmd .= ' -bordercolor "' . $borderColor . '"  -border ' . $borderSize;
     $cmd .= ' "' . $p->getDestination() . '"';
     $ret = $p->execute($cmd);
     $p->setSource($p->getDestination());
     $p->setHistory($p->getDestination());
     return $p;
 }