protected function applyWatermarkGD($resource, Picture $picture) {

        // SOURCE IMAGE DIMENSIONS
        $pictureWidth  = imagesx($resource);
        $pictureHeight = imagesy($resource);

        // WATERMARK DIMENSIONS
        $watermarkPicture = new Picture($this->watermark, NULL, Picture::WORKER_GD);

        $opacity = new Opacity($this->opacity);
        $opacity->apply($watermarkPicture);

        if($this->size)
        {
            $resize = new Resize(
                $pictureWidth / 100 * $this->size,
                $pictureHeight / 100 * $this->size,
                Resize::MODE_FIT
            );

            $resize->apply($watermarkPicture);
        }

        $watermark = $watermarkPicture->getResource($watermarkPicture::WORKER_GD);

        imagealphablending($watermark, TRUE);

        $watermarkWidth  = imagesx($watermark);
        $watermarkHeight = imagesx($watermark);

        // CALCULATE WATERMARK POSITION
        switch($this->position)
        {
            case 'repeat':

                for($w = 0; $w < $pictureWidth; $w += $watermarkWidth + $this->space)
                {
                    for($h = 0; $h < $pictureHeight; $h += $watermarkHeight + $this->space)
                    {
                        imagecopy($resource, $watermark, $w, $h, 0, 0, $watermarkWidth, $watermarkHeight);
                    }
                }

                return $resource;

            case 'center':

                $positionX = ($pictureWidth - $watermarkWidth) / 2 - $this->offsetX;
                $positionY = ($pictureHeight - $watermarkHeight) / 2 - $this->offsetY;
                break;

            case 'topRight':

                $positionX = $pictureWidth - $watermarkWidth - $this->offsetX;
                $positionY = $this->offsetY;
                break;

            case 'bottomRight':

                $positionX = $pictureWidth  - $watermarkWidth  - $this->offsetX;
                $positionY = $pictureHeight - $watermarkHeight - $this->offsetY;
                break;

            case 'bottomLeft':

                $positionX = $this->offsetX;
                $positionY = $pictureHeight - $watermarkHeight - $this->offsetY;
                break;

            default:

                $positionX = $this->offsetX;
                $positionY = $this->offsetY;
                break;
        }

        imagecopy($resource, $watermark, $positionX, $positionY, 0, 0, $watermarkWidth, $watermarkHeight);

        return $resource;
    }
protected function applyWatermarkGD($resource, Picture $picture) {

        // SOURCE IMAGE DIMENSIONS
        $pictureWidth  = imagesx($resource);
        $pictureHeight = imagesy($resource);

        // WATERMARK DIMENSIONS
        $watermarkPicture = new Picture($this->watermark, NULL, Picture::WORKER_GD);

        $opacity = new Opacity($this->opacity);
        $opacity->apply($watermarkPicture);

        if($this->size)
        {
            $resize = new Resize(
                $pictureWidth / 100 * $this->size,
                $pictureHeight / 100 * $this->size,
                Resize::MODE_FIT
            );

            $resize->apply($watermarkPicture);
        }

        $watermark = $watermarkPicture->getResource($watermarkPicture::WORKER_GD);

        imagealphablending($watermark, TRUE);

        $watermarkWidth  = imagesx($watermark);
        $watermarkHeight = imagesx($watermark);

        // CALCULATE WATERMARK POSITION
        switch($this->position)
        {
            case 'repeat':

                for($w = 0; $w < $pictureWidth; $w += $watermarkWidth + $this->space)
                {
                    for($h = 0; $h < $pictureHeight; $h += $watermarkHeight + $this->space)
                    {
                        imagecopy($resource, $watermark, $w, $h, 0, 0, $watermarkWidth, $watermarkHeight);
                    }
                }

                return $resource;

            case 'center':

                $positionX = ($pictureWidth - $watermarkWidth) / 2 - $this->offsetX;
                $positionY = ($pictureHeight - $watermarkHeight) / 2 - $this->offsetY;
                break;

            case 'topRight':

                $positionX = $pictureWidth - $watermarkWidth - $this->offsetX;
                $positionY = $this->offsetY;
                break;

            case 'bottomRight':

                $positionX = $pictureWidth  - $watermarkWidth  - $this->offsetX;
                $positionY = $pictureHeight - $watermarkHeight - $this->offsetY;
                break;

            case 'bottomLeft':

                $positionX = $this->offsetX;
                $positionY = $pictureHeight - $watermarkHeight - $this->offsetY;
                break;

            default:

                $positionX = $this->offsetX;
                $positionY = $this->offsetY;
                break;
        }

        imagecopy($resource, $watermark, $positionX, $positionY, 0, 0, $watermarkWidth, $watermarkHeight);

        return $resource;
    }
protected function applyWatermarkGD ( $ resource , Picture $ picture ) { // SOURCE IMAGE DIMENSIONS $ pictureWidth = imagesx ( $ resource ) ; $ pictureHeight = imagesy ( $ resource ) ; // WATERMARK DIMENSIONS $ watermarkPicture = new Picture ( $ this -> watermark , NULL , Picture :: WORKER_GD ) ; $ opacity = new Opacity ( $ this -> opacity ) ; $ opacity -> apply ( $ watermarkPicture ) ; if ( $ this -> size ) { $ resize = new Resize ( $ pictureWidth / 100 * $ this -> size , $ pictureHeight / 100 * $ this -> size , Resize :: MODE_FIT ) ; $ resize -> apply ( $ watermarkPicture ) ; } $ watermark = $ watermarkPicture -> getResource ( $ watermarkPicture :: WORKER_GD ) ; imagealphablending ( $ watermark , TRUE ) ; $ watermarkWidth = imagesx ( $ watermark ) ; $ watermarkHeight = imagesx ( $ watermark ) ; // CALCULATE WATERMARK POSITION switch ( $ this -> position ) { case 'repeat' : for ( $ w = 0 ; $ w < $ pictureWidth ; $ w += $ watermarkWidth + $ this -> space ) { for ( $ h = 0 ; $ h < $ pictureHeight ; $ h += $ watermarkHeight + $ this -> space ) { imagecopy ( $ resource , $ watermark , $ w , $ h , 0 , 0 , $ watermarkWidth , $ watermarkHeight ) ; } } return $ resource ; case 'center' : $ positionX = ( $ pictureWidth - $ watermarkWidth ) / 2 - $ this -> offsetX ; $ positionY = ( $ pictureHeight - $ watermarkHeight ) / 2 - $ this -> offsetY ; break ; case 'topRight' : $ positionX = $ pictureWidth - $ watermarkWidth - $ this -> offsetX ; $ positionY = $ this -> offsetY ; break ; case 'bottomRight' : $ positionX = $ pictureWidth - $ watermarkWidth - $ this -> offsetX ; $ positionY = $ pictureHeight - $ watermarkHeight - $ this -> offsetY ; break ; case 'bottomLeft' : $ positionX = $ this -> offsetX ; $ positionY = $ pictureHeight - $ watermarkHeight - $ this -> offsetY ; break ; default : $ positionX = $ this -> offsetX ; $ positionY = $ this -> offsetY ; break ; } imagecopy ( $ resource , $ watermark , $ positionX , $ positionY , 0 , 0 , $ watermarkWidth , $ watermarkHeight ) ; return $ resource ; }
Watermark effect processed by gd
@param resource $resource gd image
@param Picture $picture
@return resource gd image
Watermark effect processed by gd