// узнаем размеры оригинального изображения $im_width = $im->getImageWidth(); $im_height = $im->getImageHeight(); // узнаем размеры водяного знака $watermark_width = $watermark->getImageWidth(); $watermark_height = $watermark->getImageHeight(); // посчитать x и y $left = $im_width - $watermark_width - 10; $top = $im_height - $watermark_height - 10; // накладываем watermark на оригинальное изображение $im->compositeImage($watermark, imagick::COMPOSITE_OVER, $left, $top); // сохраняем оригинал $im->writeImage('./images/' . $image_name . '.' . $p[1]); } else { // сохраняем .gif с учетом анимации $im->writeImages('./images/' . $image_name . '.' . $p[1], true); } // Копируем объект для различных типов $large = $im->clone(); $square = $im->clone(); // Создаем квадратное изображение 160x160 px $square->cropThumbnailImage(160, 160); $square->writeImage('./images/' . $image_name . 's' . '.' . $p[1]); // Создаем большое изображение с шириной 640 px и переменной высотой $large->thumbnailImage(640, 0); $large->writeImage('./images/' . $image_name . 'l' . '.' . $p[1]); // добавляем имя, расширение, дату загрузки изображения в БД // выбираем коллекцию $collection = $db->images; // добавляем новый документ - изображение в коллекцию Images $collection->insert(array('image' => $image_name, 'ext' => $p[1], 'title' => '', 'views' => 0, 'gallery' => 0, 'date' => date("d-m-Y H:i:s")));
public function generatePreviewImage($pdfFile, $saveTo) { try { $img = new imagick(Director::getAbsFile($pdfFile) . "[0]"); //we only take first page // -flatten option, this is necessary for images with transparency, it will produce white background for transparent regions $img->setImageAlphaChannel(11); //Imagick::ALPHACHANNEL_REMOVE has been added in 3.2.0b2 $img->mergeImageLayers(imagick::LAYERMETHOD_FLATTEN); //set new format //@Todo detect format from filename $img->setImageFormat('jpg'); $img->setCompressionQuality(100); //save image file $img->writeImages($saveTo, false); } catch (\Exception $e) { error_log($e->getMessage()); return false; } return true; }
public function generatePdfImages($fileName, $filePages) { $pages = 0; $json = array(); if (file_exists(DIR_DOWNLOAD . $this->config->get('msconf_temp_download_path') . $fileName)) { if (preg_match('/[^-0-9,]/', $filePages)) { $json['errors'][] = $this->language->get('ms_error_product_invalid_pdf_range'); } else { $offsets = explode(',', $filePages); foreach ($offsets as $offset) { if (!preg_match('/^[0-9]+(-[0-9]+)?$/', $offset)) { $json['errors'][] = $this->language->get('ms_error_product_invalid_pdf_range'); break; } } } if (!empty($json['errors'])) { return $json; } $pathinfo = pathinfo(DIR_DOWNLOAD . $this->config->get('msconf_temp_download_path') . $fileName); $list = glob(DIR_IMAGE . $this->config->get('msconf_temp_image_path') . $pathinfo['filename'] . '*\\.png'); //var_dump($list); foreach ($list as $pagePreview) { //var_dump('unlinking ' . $pagePreview); @unlink($pagePreview); } $name = DIR_DOWNLOAD . $this->config->get('msconf_temp_download_path') . $fileName . "[" . $filePages . "]"; $im = new imagick($name); $pages = $im->getNumberImages(); $im->setImageFormat("png"); $im->setImageCompressionQuality(100); $pathinfo = pathinfo(DIR_DOWNLOAD . $this->config->get('msconf_temp_download_path') . $fileName); $json['token'] = substr($pathinfo['basename'], 0, strrpos($pathinfo['basename'], '.')); if ($im->writeImages(DIR_IMAGE . $this->config->get('msconf_temp_image_path') . $pathinfo['filename'] . '.png', false)) { $list = glob(DIR_IMAGE . $this->config->get('msconf_temp_image_path') . $pathinfo['filename'] . '*\\.png'); foreach ($list as $pagePreview) { $pathinfo = pathinfo($pagePreview); $this->session->data['multiseller']['files'][] = $pathinfo['basename']; $thumb = $this->resizeImage($this->config->get('msconf_temp_image_path') . $pathinfo['basename'], $this->config->get('msconf_image_preview_width'), $this->config->get('msconf_image_preview_height')); $json['images'][] = array('name' => $pathinfo['basename'], 'thumb' => $thumb); } //var_dump($this->session->data['multiseller']['files']); return $json; } } }
/** * Convert to output format. This method convert from pdf to specified format with optimizing * @throw Exception * @access public * @param string $outputPath - path to file. May content only path or path with filename * @param int/string[=ALL] $page - number of document page wich will be converted into image. If specified 'ALL' - will be converted all pages. * @param string $format - output format (see self::getFormats()) * @param array $resolution - array with x&y resolution DPI * @param int $depth - bit depth image * @return string/bool[false] - return image path of last converted page */ public function convert($outputPath = '', $page = 'ALL', $format = 'png', $resolution = array('x' => 300, 'y' => 300), $depth = 8) { if (!Imagick::queryFormats(strtoupper($format))) { throw new Exception('Unsupported format'); } $startTime = microtime(true); $im = new imagick(); $im->setResolution($resolution['x'], $resolution['y']); $format = strtolower($format); $im->setFormat($format); if ($outputPath) { if (is_dir($outputPath)) { $outputPath = $outputPath . pathinfo($this->filePathWithoutType, PATHINFO_FILENAME); } $outputFileName = $outputPath; } else { $outputFileName = $this->filePathWithoutType; } if ($page === 'ALL') { $im->readImage($this->filePathWithoutType . '.pdf'); $im->setImageFormat($format); $im->setImageAlphaChannel(11); // it's a new constant imagick::ALPHACHANNEL_REMOVE $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); $im->setOption($format . ':bit-depth', $depth); $im->writeImages($outputFileName . "." . $format, false); $logString = '[POINT] File "' . $this->filePathWithoutType . '.pdf" converted to "' . $format . '" with ' . $im->getNumberImages() . ' pages (ex: ' . (microtime(true) - $startTime) . 's)'; $this->setLog($logString); //Optimizing if ($format == 'png' && $this->optipngChecking()) { $startTime = microtime(true); for ($page = $i = 0; $i < $im->getNumberImages(); $i++) { $this->execute('optipng -o=5', $outputFileName . "-" . (int) $i . "." . $format); } $logString = '[POINT] Files "' . $outputFileName . '-x.' . $format . '" optimized (ex: ' . (microtime(true) - $startTime) . 's)'; $this->setLog($logString); } } else { $im->readImage($this->filePathWithoutType . '.pdf[' . (int) $page . ']'); $im->setImageFormat($format); $im->setImageAlphaChannel(11); // it's a new constant imagick::ALPHACHANNEL_REMOVE $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); $im->setOption($format . ':color-type', 2); $im->setOption($format . ':bit-depth', $depth); $im->writeImage($outputFileName . "-" . (int) $page . "." . $format); $logString = '[POINT] File "' . $outputFileName . '.pdf" converted to "' . $format . '" one page (ex: ' . (microtime(true) - $startTime) . 's)'; $this->setLog($logString); //Optimizing if ($format == 'png' && $this->optipngChecking()) { $startTime = microtime(true); $this->execute('optipng -o=5', $outputFileName . "-" . (int) $page . "." . $format); $logString = '[POINT] File "' . $outputFileName . "-" . (int) $page . "." . $format . '" optimized (ex: ' . (microtime(true) - $startTime) . 's)'; $this->setLog($logString); } } if (file_exists($outputFileName . "-" . (int) $page . "." . $format)) { return $outputFileName . "-" . (int) $page . "." . $format; } else { return false; } }