/**
  * Add Watermark as Image
  *
  * @param $image_path - Image path to place as watermark on image
  * @param $vertical_position - Set vertical position of the text that will be placed on image
  * @param $horizontal_position - Set horizonal position of the text that will be placed on image
  * @param $margin - Margin text by spacing from corners
  * @return void
  */
 public function addWatermarkImage($image_path, $vertical_position, $horizontal_position, $margin = 5)
 {
     if (file_exists($image_path)) {
         $valid_vpositions = array(self::IMAGE_POSITION_TOP, self::IMAGE_POSITION_CENTER, self::IMAGE_POSITION_BOTTOM);
         $valid_hpositions = array(self::IMAGE_POSITION_LEFT, self::IMAGE_POSITION_CENTER, self::IMAGE_POSITION_RIGHT);
         $watermark = new ImageTools($image_path);
         if (in_array($vertical_position, $valid_vpositions, true) && in_array($horizontal_position, $valid_hpositions, true)) {
             $x_padd = 0;
             $y_padd = 0;
             $w_width = $watermark->getX();
             $w_height = $watermark->getY();
             $im_width = $this->getX();
             $im_height = $this->getY();
             // Set X-Position
             if ($horizontal_position == self::IMAGE_POSITION_LEFT) {
                 $x_padd = $margin;
             } else {
                 if ($horizontal_position == self::IMAGE_POSITION_CENTER) {
                     $x_padd = floor($im_width / 2) - floor($w_width / 2);
                 } else {
                     $x_padd = $im_width - $w_width - $margin;
                 }
             }
             // Set Y-Position
             if ($vertical_position == self::IMAGE_POSITION_CENTER) {
                 $y_padd = floor($im_height / 2) - floor($w_height / 2);
             } else {
                 if ($vertical_position == self::IMAGE_POSITION_BOTTOM) {
                     $y_padd = $im_height - floor($w_height) - $margin;
                 } else {
                     $y_padd += $margin;
                 }
             }
             imagecopy($this->im, $watermark->getIm(), $x_padd, $y_padd, 0, 0, imagesx($watermark->getIm()), imagesy($watermark->getIm()));
             //$watermark->destroy();
         } else {
             $this->parseError("Invalid Watermark image position!");
         }
     } else {
         $this->parseError("Invalid image path!");
     }
 }