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);
    }
}
Beispiel #2
0
 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;
 }
Beispiel #3
0
 // Создаем новый объект 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]);
Beispiel #4
0
 /**
  * @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);
     }
 }