Ejemplo n.º 1
0
 /**
  * Add watermark to an image
  * @author Francis R <*****@*****.**>
  * @param string $source: source file string path
  * @param string $dest  : destination file string path
  * @param int $watermark: 0 if watermark is disable, 1 if watermark is enable
  * @param array $options: array consist of status, opacity, position and user_logo
  * @return string       : destination file path
  */
 public static function add_watermark_image($source, $dest, $options = '')
 {
     if ($options == '') {
         $options['status'] = 0;
     }
     if ($options['status'] != 1) {
         return;
     }
     $filename = $source;
     //default path for watermark
     $watermark = WPL_ABSPATH . 'assets' . DS . 'img' . DS . 'system' . DS;
     if (trim($options['url']) != '') {
         $watermark .= trim($options['url']);
     }
     if (!wpl_file::exists($watermark)) {
         return;
     }
     $source = strtolower($source);
     $extension = wpl_file::getExt($source);
     $w_extension = wpl_file::getExt($watermark);
     list($w_width, $w_height, $w_type, $w_attr) = getimagesize($filename);
     list($markwidth, $markheight, $w_type1, $w_attr1) = getimagesize($watermark);
     switch ($extension) {
         case 'jpg':
         case 'jpeg':
             $w_dest = imagecreatefromjpeg($filename);
             break;
         case 'gif':
             $w_dest = imagecreatefromgif($filename);
             break;
         case 'png':
             $w_dest = imagecreatefrompng($filename);
             break;
         default:
             return;
     }
     switch ($w_extension) {
         case 'jpg':
         case 'jpeg':
             $w_src = imagecreatefromjpeg($watermark);
             break;
         case 'gif':
             $w_src = imagecreatefromgif($watermark);
             break;
         case 'png':
             $w_src = imagecreatefrompng($watermark);
             break;
         default:
             return;
     }
     // Copy and merge
     $opacity = $options['opacity'];
     $position = strtolower($options['position']);
     switch ($position) {
         case 'center':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth >> 1, $w_height - $markheight >> 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'left':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth > 1, $w_height - $markheight >> 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'right':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth, $w_height - $markheight >> 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'top':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth >> 1, $w_height - $markheight > 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'bottom':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth >> 1, $w_height - $markheight, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'top-left':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth > 1, $w_height - $markheight > 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'top-right':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth, $w_height - $markheight > 1, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'bottom-left':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth > 1, $w_height - $markheight, 0, 0, $markwidth, $markheight, $opacity);
             break;
         case 'bottom-right':
             wpl_images::imagecopymerge_alpha($w_dest, $w_src, $w_width - $markwidth, $w_height - $markheight, 0, 0, $markwidth, $markheight, $opacity);
             break;
     }
     if ($extension == 'jpg' || $extension == 'jpeg') {
         $quality = 95;
         if (wpl_global::check_addon('optimizer') && wpl_global::get_client() === 0) {
             $quality = wpl_addon_optimizer::optimize_image(wpl_addon_optimizer::IMAGE_JPEG, $w_dest);
         }
         ob_start();
         imagejpeg($w_dest, NULL, $quality);
         $out_image = ob_get_clean();
         wpl_file::write($dest, $out_image);
     } elseif ($extension == 'png') {
         $quality = 9;
         if (wpl_global::check_addon('optimizer') && wpl_global::get_client() === 0) {
             $quality = wpl_addon_optimizer::optimize_image(wpl_addon_optimizer::IMAGE_PNG, $w_dest);
         }
         ob_start();
         imagepng($w_dest, NULL, $quality);
         $out_image = ob_get_clean();
         wpl_file::write($dest, $out_image);
     } elseif ($extension == 'gif') {
         ob_start();
         imagegif($w_dest);
         $out_image = ob_get_clean();
         wpl_file::write($dest, $out_image);
     }
     imagedestroy($w_src);
     imagedestroy($w_dest);
     // Return Destination
     return $source;
 }