function makethumb($srcFile, $dstFile, $dstW, $dstH, $imwf = false) { $im = new imagick($srcFile); $source_w = $im->getImageWidth(); $source_h = $im->getImageHeight(); if ($dstW === 0 && $dstH === 0) { $dstW = $source_w; $dstH = $source_h; } else { // 取得縮在此範圍內的比例 $percent = getResizePercent($source_w, $source_h, $dstW, $dstH); $dstW = $source_w * $percent; $dstH = $source_h * $percent; } $im->thumbnailImage($dstW, $dstH); $im->writeImage($dstFile); $watermarkFile = './logo.png'; if ($imwf && is_file($watermarkFile) && is_file($dstFile)) { $image = new imagick($dstFile); $watermark = new imagick($watermarkFile); $iWidth = $image->getImageWidth(); $iHeight = $image->getImageHeight(); $wWidth = $watermark->getImageWidth(); $wHeight = $watermark->getImageHeight(); if ($iHeight < $wHeight || $iWidth < $wWidth) { $watermark->scaleImage($iWidth, $iHeight); $wWidth = $watermark->getImageWidth(); $wHeight = $watermark->getImageHeight(); } $x = ($iWidth - $wWidth) / 2; $y = ($iHeight - $wHeight) / 2; $image->compositeImage($watermark, imagick::COMPOSITE_OVER, $x, $y); $image->writeImage($dstFile); } }
private function generate() { $taken_seats_result = $this->seatbooking->get_taken_seats_ids(); $taken_seats = array(); foreach ($taken_seats_result as $seat) { $taken_seats[$seat] = 0; } $coords = $this->load_xmlconfig_to_array(); $taken_seats_coords = array_intersect_key($coords, $taken_seats); $bg = new imagick($this->filename_bg); $marker = new imagick($this->filename_marker); $marker_width = $marker->getImageWidth(); $marker_height = $marker->getImageHeight(); foreach ($taken_seats_coords as $seat) { $x = $seat[0] - floor($marker_width / 2); $y = $seat[1] - floor($marker_width / 2); $bg->compositeImage($marker, imagick::COMPOSITE_OVER, $x, $y); } return $bg; }
// Создаем новый объект imagick $im = new imagick($image); if ($p[1] != 'gif') { // Открываем watermark $watermark = new imagick('./img/watermark.png'); // узнаем размеры оригинального изображения $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]);
/** * @param int $dw * @param bool $pdfLogo * @param int $pdfLogoSize */ public function showImg($dw = 500, $pdfLogo = false, $pdfLogoSize = 128) { $cachename = $this->fullpath . $dw . $this->pageid . ".png"; $cacheimg = $this->cachepath . '/' . $this->_nameFilter($cachename); if (class_exists('Imagick')) { try { $im = $this->_dataCacher($cachename); if ($im === false) { $this->_logToFile('File not in cache'); $im = new imagick($this->fullpath . '[' . $this->pageid . ']'); //$im->setSize($dw*2,$dw*2); $im->setImageFormat("png"); $im->adaptiveResizeImage($dw, $dw, true); // add a border to the image $color = new ImagickPixel(); $color->setColor("rgb(200,200,200)"); $im->borderImage($color, 1, 1); // draw the PDF icon on top of the PDF preview if ($pdfLogo) { $pdflogo = new Imagick($this->assetsPath . $this->deficon); $pdflogo->adaptiveResizeImage($pdfLogoSize, $pdfLogoSize); $im->compositeImage($pdflogo, Imagick::COMPOSITE_DEFAULT, 1, 1); } $this->_dataCacher($cachename, $im); $im->writeImage($cacheimg); } else { $this->_logToFile('File IS cached'); } header("Content-Type: image/png"); header("Content-Disposition: attachment; filename=\"" . $cachename . ".png\";"); $this->getRawFile($cacheimg, false, 'PNG', true); } catch (Exception $e) { return parent::showImg($dw); } } else { return parent::showImg($dw); } }